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.
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
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
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\)
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
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
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.