Traffine I/O

Bahasa Indonesia

2022-11-20

Apa itu analisis regresi

Apa itu analisis regresi?

Analisis regresi adalah teknik statistik yang mengekspresikan hubungan sebab-akibat sebagai fungsi dari faktor mana yang mempengaruhi hasil mana dan seberapa banyak. Dalam hal ini, nilai numerik yang merupakan hasil disebut variabel tujuan dan nilai numerik yang merupakan faktor disebut variabel penjelas.

Ketika hanya ada satu variabel penjelas, maka disebut analisis regresi sederhana, dan ketika ada beberapa variabel penjelas, maka disebut analisis regresi berganda.

Analisis regresi adalah teknik statistik yang banyak digunakan baik dalam bisnis maupun akademis.

Contoh-contoh analisis regresi

Berikut ini adalah contoh-contoh analisis regresi.

  • Prediksi harga real estate

    • Analisis regresi Sederhana
      • Variabel tujuan: harga real estat
      • Variabel penjelas: ukuran lot
    • Analisis regresi berganda
      • Variabel tujuan: harga real estat
      • Variabel penjelas: ukuran lot, jarak dari stasiun, usia bangunan, dll.
  • Prediksi tingkat klik pada iklan

    • Analisis regresi sederhana
      • Variabel tujuan: tingkat klik
      • Variabel penjelas: judul
    • Analisis regresi berganda
      • Variabel objektif: rasio klik
      • Variabel penjelas: judul, font, genre, dll.

Analisis regresi dalam Python

Berikut adalah kode untuk mengimplementasikan analisis regresi dalam Python. Dalam hal ini, saya akan menggunakan data harga rumah Boston dari sklearn sebagai dataset.

import pandas as pd
from sklearn import datasets

boston = datasets.load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df["PRICE"] = boston.target
df.head()

Linear regression | 1

Label PRICE adalah harga rumah dan label lainnya adalah data karakteristik rumah.

Rincian dari label-label di setiap kolom dapat dilihat dengan DESCR.

print(boston.DESCR)
.. _boston_dataset:

Boston house prices dataset
---------------------------

**Data Set Characteristics:**

    :Number of Instances: 506

    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of black people by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/


This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.

The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.

The Boston house-price data has been used in many machine learning papers that address regression
problems.

.. topic:: References

   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.

Pisahkan kumpulan data menjadi data pelatihan dan pengujian.

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(
  boston.data,
  boston.target,
  random_state=0
)

Analisis regresi sederhana

Dalam analisis regresi sederhana, satu variabel penjelas memprediksi variabel tujuan. Dengan asumsi x sebagai variabel penjelas, y sebagai variabel tujuan, a sebagai koefisien, dan b sebagai intersep, model regresi tunggal dapat dinyatakan sebagai berikut

y = ax + b

Kita akan menggunakan sklearn python untuk menghitung a dan b. Dalam hal ini, kita akan menggunakan label RM dalam dataset sebagai variabel penjelas.

from sklearn import linear_model

x_rm_train = x_train[:, [5]]
x_rm_test = x_test[:, [5]]

model = linear_model.LinearRegression()
model.fit(x_train_rm, y_train)
a = model.coef_
b = model.intercept_
print("a: ", a)
print("b: ", b)
a:  [9.31294923]
b:  -36.180992646339206

Visualisasikan data dan model.

import matplotlib.pyplot as plt

plt.scatter(x_rm_train, y_train, label="Train")
plt.scatter(x_rm_test, y_test, label="Test")

y_pred = model.predict(x_rm_train)
plt.plot(x_rm_train, y_pred, c="black")

plt.xlabel("RM")
plt.ylabel("PRICE")
plt.legend()
plt.show()

Linear regression | 2

Train adalah data pelatihan, Test adalah data pengujian, dan garis hitam adalah model.

Koefisien determinasi

Menghitung koefisien determinasi R^2 dari model. R^2 mengambil nilai antara 0 dan 1. Ketika R^2 mendekati 1, itu berarti prediksi sangat cocok dengan nilai aktual. Di sisi lain, jika R^2 mendekati 0, itu berarti bahwa model tersebut memiliki kekuatan prediksi yang sangat rendah.

R^2 diwakili oleh persamaan berikut

R^2 = 1-{\frac {\displaystyle \sum _{i=1}^{N}\left(y_{i}-f_{i}\right)^{2}}{\displaystyle \sum _{j=1}^{N}\left(y_{j}-{\overline {y}}\right)^{2}}}

di mana y_{i} adalah nilai yang benar, f_{i} adalah nilai yang diprediksi, dan {\overline {y}} adalah rata-rata dari nilai yang benar.

R^2 dapat dengan mudah dihitung dengan fungsi r2_score sklearn. Kode berikut menghitung R^2 untuk masing-masing data pelatihan dan pengujian.

from sklearn.metrics import r2_score

y_pred_train = model.predict(x_rm_train)
print("R2 (train): ", r2_score(y_train, y_pred_train))

y_pred_test = model.predict(x_rm_test)
print("R2 (test): ", r2_score(y_test, y_pred_test))
R2 (train): 0.48752067939343646
R2 (test): 0.4679000543136781

MSE

Hitung Mean Squared Error (MSE) dari model, di mana E adalah kesalahan, y_k adalah nilai yang diprediksi, dan t_k adalah nilai yang benar, dinyatakan sebagai berikut

E = \frac{1}{n} \sum_{k=1}^n(y_k-t_k)^2

MSE yang lebih kecil dapat diinterpretasikan sebagai kesalahan yang lebih kecil dalam model.

Kode berikut ini menghitung MSE untuk data pelatihan dan data uji, masing-masing.

from sklearn.metrics import mean_squared_error

print("MSE (train): ", mean_squared_error(y_train, y_pred_train))

print("MSE (test): ", mean_squared_error(y_test, y_pred_test))
MSE (train):  43.71870658739849
MSE (test):  43.472041677202206

Analisis regresi berganda

Analisis regresi berganda memprediksi variabel tujuan dengan beberapa variabel penjelas. Model regresi berganda diwakili oleh persamaan berikut dengan x_k sebagai masing-masing variabel penjelas.

y = \sum_{k=1}^na_kx_k + b

Kali ini, kita akan melakukan analisis regresi berganda dengan menggunakan semua variabel penjelas.

model = linear_model.LinearRegression()

model.fit(x_train, t_train)

a_df = pd.DataFrame(boston.feature_names, columns=["Exp"])
a_df["a"] = pd.Series(model.coef_)
a_df
Exp a
0 CRIM -0.117735
1 ZN 0.044017
2 INDUS -0.005768
3 CHAS 2.393416
4 NOX -15.589421
5 RM 3.768968
6 AGE -0.007035
7 DIS -1.434956
8 RAD 0.240081
9 TAX -0.011297
10 PTRATIO -0.985547
11 B 0.008444
12 LSTAT -0.499117
print("b: ", model.intercept_)
b:  36.93325545712031

Koefisien determinasi

Hitung koefisien determinasi untuk masing-masing data pelatihan dan data uji.

from sklearn.metrics import r2_score

y_pred_train = model.predict(x_rm_train)
print("R2 (train): ", r2_score(y_train, y_pred_train))

y_pred_test = model.predict(x_rm_test)
print("R2 (test): ", r2_score(y_test, y_pred_test))
R2 (train): 0.7697699488741149
R2 (test): 0.635463843320211

Dibandingkan dengan model regresi sederhana, R^2 mendekati 1, meningkatkan kesepakatan prediksi dengan nilai yang benar.

MSE

Hitung MSE pada masing-masing data pelatihan dan pengujian.

from sklearn.metrics import mean_squared_error

print("MSE (train): ", mean_squared_error(y_train, y_pred_train))

print("MSE (test): ", mean_squared_error(y_test, y_pred_test))
MSE (train):  19.640519427908046
MSE (test):  29.78224509230252

MSE lebih kecil dibandingkan dengan model regresi sederhana. Namun, MSE untuk data uji secara signifikan lebih besar daripada MSE untuk data pelatihan. Dengan kata lain, model ini mungkin telah over-fitted terhadap data training. Dengan demikian, kebaikan model harus dinilai tidak hanya dalam hal peningkatan R^2 dan MSE, tetapi juga dengan kesadaran akan perbedaan kesalahan antara data pelatihan dan data uji.

Referensi

https://pub.towardsai.net/linear-regression-basics-for-absolute-beginners-68ed9ff980ae
/ja/articles/loss-functon

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!