Produsen mobil merek X memiliki data harga 200 mobil dari produsen mobil lain beserta kekuatan mesinnya. Produsen ini meminta saya sebagai data scientist untuk membuat suatu model yang dapat memprediksi harga mobil hanya berdasarkan berapa kekuatan mesin dari suatu mobil.

Memanggil library dan dataset yang akan digunakan

library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data <- read.csv('mobil_mesin_harga.csv')
summary(data)
##  KekuatanMesin       Harga       
##  Min.   : 48.0   Min.   : 51.18  
##  1st Qu.: 70.0   1st Qu.: 77.75  
##  Median : 95.0   Median :103.20  
##  Mean   :103.3   Mean   :132.30  
##  3rd Qu.:116.0   3rd Qu.:165.01  
##  Max.   :262.0   Max.   :454.00

Membagi dataset menjadi data train dan test

Proporsi data train dan test ditetapkan menjadi 80:20.

set.seed(04092023)  # For reproducibility
train_index <- sample(1:nrow(data), 0.8 * nrow(data))
train_data <- data[train_index, ]
test_data <- data[-train_index, ]
head(train_data, n = 10L)
##     KekuatanMesin  Harga
## 116           102  79.57
## 13            121 211.05
## 64            123 255.52
## 145           111 116.94
## 83             88  81.89
## 24             68  62.29
## 9             140 238.75
## 102           200 196.99
## 69            155 350.56
## 42             78  67.85
head(test_data, n = 10L)
##    KekuatanMesin  Harga
## 12           121 209.70
## 14           121 245.65
## 17           182 368.80
## 18            48  51.51
## 26            68  76.09
## 35            76  72.95
## 36            86  78.95
## 43            90 110.48
## 44           176 322.50
## 49            68  67.95

Pemodelan

Karena data yang digunakan terdiri dari 1 variabel target dan 1 variabel bebas, maka metode yang akan digunakan adalah Regresi Linear Sederhana.

model <- lm(Harga ~ KekuatanMesin, data = data)
summary(model)
## 
## Call:
## lm(formula = Harga ~ KekuatanMesin, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -101.909  -22.369   -4.713   17.776  182.671 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -45.73358    9.70285  -4.713 4.58e-06 ***
## KekuatanMesin   1.72316    0.08831  19.513  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 46.68 on 198 degrees of freedom
## Multiple R-squared:  0.6579, Adjusted R-squared:  0.6562 
## F-statistic: 380.7 on 1 and 198 DF,  p-value: < 2.2e-16

Model yang didapat adalah: \(Harga = −45.73358 + 1.72316KekuatanMesin\)

Prediksi dengan test set

predictions <- predict(model, newdata = test_data)
result <-cbind(test_data, predictions)
head(result, n = 10L)
##    KekuatanMesin  Harga predictions
## 12           121 209.70   162.76929
## 14           121 245.65   162.76929
## 17           182 368.80   267.88232
## 18            48  51.51    36.97830
## 26            68  76.09    71.44159
## 35            76  72.95    85.22690
## 36            86  78.95   102.45854
## 43            90 110.48   109.35120
## 44           176 322.50   257.54333
## 49            68  67.95    71.44159

Evaluasi Model

mae <- mean(abs(predictions - test_data$Harga))
mse <- mean((predictions - test_data$Harga)^2)
rmse <- sqrt(mse)
cat("Mean Absolute Error (MAE):", mae, "\n")
## Mean Absolute Error (MAE): 24.53459
cat("Mean Squared Error (MSE):", mse, "\n")
## Mean Squared Error (MSE): 1178.561
cat("Root Mean Squared Error (RMSE):", rmse, "\n")
## Root Mean Squared Error (RMSE): 34.33018

Plot data dan garis regresi

ggplot(data, aes(x = KekuatanMesin, y = Harga)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(x = "Kekuatan Mesin", y = "Harga") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Note: Proyek ini adalah bagian dari Unjuk Kemampuan yang diberikan setelah saya mengikuti kelas Membangun Karir Data Scientist dengan Pemrograman R yang diselenggarakan oleh Course-Net bekerjasama dengan Kartu Prakerja pada 28 Agustus - 1 September 2023.