Linear Regression dengan Dummy Data

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/