Pendahuluan
Salah satu algoritma paling dasar dalam machine learning adalah Linear Regression. Linear Regression merupakan algoritma yang digunakan untuk memodelkan hubungan antara variabel independen (feature) dan variabel dependen (target), caranya dengan menemukan garis lurus terbaik yang menggambarkan hubungan antara kedua variabel tersebut. Rumus umum dari Linear Regression adalah:
$$Y = aX + b$$
Di mana:
\(Y\) adalah variabel dependen (target)
\(X\) adalah variabel independen (feature)
\(a\) adalah koefisien regresi (slope)
\(b\) adalah intercept (titik potong dengan sumbu Y)
Pada artikel ini, kita akan belajar cara menggunakan Linear Regression untuk melakukan prediksi.
Catatan: Hasil angka yang dihasilkan
Mengumpulkan Data
Pada artikel ini, kita tidak akan menggunakan data real terlebih dahulu. Data yang akan kita gunakan berupa data sintetik. Kita akan membuat dataset dengan variabel independen yang kita beri nama SquareFootage
(luas rumah) dan variabel dependen Price
(harga rumah).
import pandas as pd
import numpy as np
import random
# Generate synthetic data
square_footage = np.random.randint(500, 5000, 150)
price = square_footage * 300 + np.random.randint(20000, 50000, 150)
# Create DataFrame
data = pd.DataFrame({'SquareFootage': square_footage, 'Price': price})
data['Price'] = data['Price'].apply(lambda x: x + random.randrange(-10000,10000))
data.head()
Di atas kita membuat data sintetik dengan menghasilkan SquareFootage
secara acak dalam rentang 500 hingga 5000 dan menghitung Price
berdasarkan rumus price = square_footage * 300 + np.random.randint(20000, 50000)
. Data ini kemudian disimpan dalam sebuah DataFrame data
. Di akhir kita beri sedikit noise dengan menambahkan angka acak random.randrange(-10000,10000)
ke dalam data.
Exploratory Data Analysis
Mari kita lakukan visualisasi untuk memahami distribusi data kita.
import matplotlib.pyplot as plt
import seaborn as sns
# Distribusi fitur
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
sns.histplot(data['SquareFootage'], kde=True)
plt.title('Distribution of Square Footage')
# Scatter plot dengan garis regresi
plt.figure(figsize=(10, 6))
sns.scatterplot(x='SquareFootage', y='Price', data=data)
plt.title('House Prices vs. Square Footage')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.show()
Di sini kita membuat visualisasi dari distribusi SquareFootage
dan scatter plot Price
versus SquareFootage
. Dari sini kita bisa memahami hubungan antara SquareFootage
dan Price
.
Membagi Data Train dan Test
Sebelum melatih model kita, terlebih dahulu kita perlu membagi data menjadi set pelatihan (train) dan set pengujian (test).
from sklearn.model_selection import train_test_split
# Definisikan fitur dan target
X = data[['SquareFootage']]
y = data['Price']
# Membagi data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Pada bagian ini, kita mendefinisikan SquareFootage
sebagai fitur (X
) dan Price
sebagai target (y
). Kemudian, kita membagi data menjadi set pelatihan dan set pengujian dengan proporsi 80% untuk pelatihan dan 20% untuk pengujian.
Melatih Model Linear Regression
Setelah data siap, sekarang kita bisa melatih model Linear Regression menggunakan data latih.
from sklearn.linear_model import LinearRegression
# Inisialisasi model
model = LinearRegression()
# Melatih model
model.fit(X_train, y_train)
Di atas kita menginisialisasi model Linear Regression LinearRegression()
dan melatihnya menggunakan data pelatihan (X_train
dan y_train
).
Evaluasi Model
Setelah model dilatih, kita perlu mengevaluasi kinerjanya menggunakan data pengujian.
from sklearn.metrics import r2_score, mean_absolute_error
# Prediksi pada set pengujian
y_pred = model.predict(X_test)
# Menghitung metrik evaluasi
mse = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
Di sini, kita menggunakan data pengujian untuk memprediksi Price
dan menghitung metrik evaluasi seperti Mean Squared Error (MSE) dan R^2 Score untuk mengukur kinerja model.
Visualisasi Hasil
Mari kita visualisasikan hasil prediksi model kita dibandingkan dengan harga sebenarnya.
plt.figure(figsize=(10, 6))
plt.scatter(X_test, y_test, color='blue', label='Actual Prices')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted Prices')
plt.title('Actual vs. Predicted Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.legend()
plt.show()
Blok kode ini menghasilkan plot yang membandingkan harga sebenarnya (y_test
) dengan harga yang diprediksi (y_pred
). Dari visualisasi ini bisa diketahui bagaimana performa model yang kita buat dalam memprediksi harga rumah.
Koefisien dan Intercept Model
Dari gambar di , terlihat bahwa garis yang dibuat cukup mendekati data yang diprediksi. Untuk lebih jelas, mari kita lihat koefisien dan intercept dari model kita.
# Koefisien model
coef = model.coef_
intercept = model.intercept_
print(f'Coefficient: {coef[0]}')
print(f'Intercept: {intercept}')
print(f'The model equation is: Price = {coef[0]:.2f} * SquareFootage + {intercept:.2f}')
Kode di atas berfungsi ini untuk mendapatkan hasil koefisien (slope) dan intercept dari model Linear Regression yang dilatih. Dari sini kita bisa mengetahui rumus yang didapatkan dari model akhir untuk melakukan prediksi, hal ini berguna untuk memberikan gambaran tentang bagaimana SquareFootage
digunakan untuk memprediksi Price
.
Penutup
Pada artikel ini, kita telah belajar dasar-dasar Linear Regression, mulai dari menghasilkan data sintetik, melakukan analisis data eksploratif, membagi data menjadi set pelatihan dan pengujian, melatih model Linear Regression, mengevaluasi kinerjanya, hingga melihat koefisien dan intercept dari model. Dengan pemahaman ini, kita siap melanjutkan ke topik-topik machine learning yang lebih kompleks. Terima kasih dan selamat belajar.
Source Code : https://www.kaggle.com/code/emhaihsan/linear-regression-with-dummy-data/