Lewati ke konten utama

Prapemrosesan dalam Data Science (Bagian 2): Centering, Scaling, dan Regresi Logistik

Cari tahu apakah centering dan scaling membantu model Anda dalam konteks regresi logistik.
Diperbarui 28 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Pada artikel pertama dalam seri ini, saya membahas peran prapemrosesan dalam tugas klasifikasi machine learning (ML), dengan pembahasan mendalam tentang algoritma k-Nearest Neighbours (k-NN) dan kumpulan data kualitas wine. Di sana Anda melihat bahwa centering dan scaling data numerik meningkatkan kinerja k-NN untuk sejumlah metrik kinerja model (misalnya akurasi). Anda juga melihat bahwa prapemrosesan tidak terjadi secara terpisah dan nilainya hanya dapat dinilai ketika dilihat dalam konteks pipeline ML berorientasi prediksi. Namun, kita hanya melihat pentingnya prapemrosesan dalam konteks satu model, k-NN. Dalam kasus itu, model kita berkinerja jauh lebih baik — tetapi apakah ini selalu terjadi? Tidak selalu! Dalam artikel ini, saya akan membahas peran scaling dan centering data numerik dalam model dasar lainnya, regresi logistik. Anda mungkin ingin menyegarkan ingatan dengan melihat artikel sebelumnya dan/atau glosarium istilah di bagian bawah tulisan ini. Sekali lagi, kita akan mengeksplorasi kumpulan data kualitas wine. Semua contoh di sini menggunakan Python. Jika Anda belum familiar dengan Python, Anda dapat melihat semua kursus data science kami di sini. Saya akan menggunakan pustaka pandas untuk kebutuhan dataframe dan scikit-learn untuk kebutuhan machine learning.

Saya akan terlebih dahulu memberi pengantar singkat tentang regresi, yang dapat digunakan untuk memprediksi nilai variabel numerik maupun kelas. Saya akan memperkenalkan regresi linear, regresi logistik, lalu menggunakan yang terakhir untuk memprediksi kualitas wine merah. Anda kemudian akan melihat apakah centering dan scaling membantu model kita dalam konteks regresi.

Pengantar Singkat tentang Regresi dengan Python

Regresi Linear di Python

Seperti disebutkan di atas, regresi lazim digunakan untuk memprediksi nilai satu variabel numerik dari variabel numerik lainnya. Sebagai contoh, di bawah ini kita melakukan regresi linear pada data perumahan Boston (kumpulan data bawaan di scikit-learn): dalam hal ini, variabel independen (sumbu-x) adalah jumlah kamar dan variabel dependen (sumbu-y) adalah harga.

Bagaimana regresi seperti ini bekerja? Secara singkat, mekanismenya sebagai berikut: kita ingin menyesuaikan model \(y = ax + b\) ke data \((x_i,y_i)\), yaitu, kita ingin menemukan \(a\) dan \(b\) yang optimal, diberikan data tersebut. Dalam formulasi ordinary least squares (OLS, sejauh ini yang paling umum), diasumsikan bahwa galat terjadi pada variabel dependen. Karena itu, \(a\) dan \(b\) optimal ditemukan dengan meminimalkan \[SSE = \sum_i (y_i - (ax_i + b))^2\] dan optimisasi ini umumnya dicapai menggunakan algoritma yang dikenal sebagai gradient descent. Di sini kita melakukan regresi linear sederhana pada data perumahan Boston:

# Import necessary packages
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot')
from sklearn import datasets
from sklearn import linear_model
import numpy as np

# Load data
boston = datasets.load_boston()
yb = boston.target.reshape(-1, 1)
Xb = boston['data'][:,5].reshape(-1, 1)

# Plot data
plt.scatter(Xb,yb)
plt.ylabel('value of house /1000 ($)')
plt.xlabel('number of rooms')

# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit( Xb, yb)

# Plot outputs
plt.scatter(Xb, yb,  color='black')
plt.plot(Xb, regr.predict(Xb), color='blue',
         linewidth=3)
plt.show()

Grafik Jumlah Kamar

Regresi ini menangkap tren kenaikan umum dari data tetapi tidak banyak lagi. Kita hanya menggunakan satu variabel prediktor dan bisa saja menggunakan lebih banyak, yang dalam hal itu kita akan memiliki \(n\) koefisien \(a_1,\ldots,a_n\) dalam model, masing-masing untuk satu variabel prediktor. Perlu dicatat bahwa besaran variabel \(a_i\) memberi tahu kita seberapa kuat variabel terkait berkorelasi dengan variabel target.

Regresi Logistik di Python

Regresi juga dapat digunakan untuk masalah klasifikasi. Contoh alaminya adalah regresi logistik. Dalam klasifikasi biner (dua label), kita dapat memandang label sebagai 0 & 1. Sekali lagi dengan menyatakan variabel prediktor sebagai \(x\), model regresi logistik diberikan oleh fungsi logistik \[F(x) = \frac{1}{1+e^{-(ax+b)}}.\] Ini berbentuk sigmoid (melengkung seperti huruf S) dan Anda dapat melihat contohnya di bawah. Untuk setiap \(x\) tertentu, jika \(F(x) <0.5\), maka model logistik memprediksi y = 0 dan, sebaliknya, jika \(F(X) > 0.5\) model memprediksi \(y = 1\). Sekali lagi, jika kita memiliki lebih dari satu variabel prediktor, kita juga memiliki \(n\) koefisien \(a_1,\ldots,a_n\), masing-masing untuk setiap variabel prediktor. Dalam hal ini, besaran variabel \(a_i\) memberi tahu kita seberapa kuat variabel terkait memengaruhi variabel prediktor.

# Synthesize data
X1 = np.random.normal(size=150)
y1 = (X1 > 0).astype(np.float)
X1[X1 > 0] *= 4
X1 += .3 * np.random.normal(size=150)
X1= X1.reshape(-1, 1)

# Run the classifier
clf = linear_model.LogisticRegression()
clf.fit(X1, y1)

# Plot the result
plt.scatter(X1.ravel(), y1, color='black', zorder=20 , alpha = 0.5)
plt.plot(X1_ordered, clf.predict_proba(X1_ordered)[:,1], color='blue' , linewidth = 3)
plt.ylabel('target variable')
plt.xlabel('predictor variable')
plt.show()

Grafik Variabel Prediktor

Regresi Logistik dan Penskalaan Data: Kumpulan Data Wine

Sekarang kita telah melihat mekanisme regresi logistik, mari terapkan pengklasifikasi regresi logistik pada kumpulan data wine kita yang lezat. Saya akan mengimpor data dan memplot variabel target (wine bagus/buruk) sebagai pengingat:

# Import necessary modules
from sklearn import linear_model
from sklearn.cross_validation import train_test_split

# Load data
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv ' , sep = ';')
X = df.drop('quality' , 1).values #drop target variable
y1 = df['quality'].values
y = y1 <= 5 # is the rating <= 5?

# plot histograms of original target variable
# and aggregated target variable
plt.figure(figsize=(20,5));
plt.subplot(1, 2, 1 );
plt.hist(y1);
plt.xlabel('original target value')
plt.ylabel('count')
plt.subplot(1, 2, 2);
plt.hist(y)
plt.xlabel('aggregated target value')
plt.show()

Grafik Nilai Target

Sekarang mari jalankan regresi logistik kita dan lihat kinerjanya!

# Split the data into test and training sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#initial logistic regression model
lr = linear_model.LogisticRegression()

# fit the model
lr = lr.fit(X_train, y_train)
print('Logistic Regression score for training set: %f' % lr.score(X_train, y_train))
from sklearn.metrics import classification_report
y_true, y_pred = y_test, lr.predict(X_test)
print(classification_report(y_true, y_pred))
Logistic Regression score for training set: 0.752932
             precision    recall  f1-score   support

      False       0.78      0.74      0.76       179
       True       0.69      0.74      0.71       141

avg / total       0.74      0.74      0.74       320

Secara default, regresi logistik ini berkinerja lebih baik daripada K-NN (dengan atau tanpa scaling). Sekarang mari kita skalakan data kita dan lakukan regresi logistik:

from sklearn.preprocessing import scale
Xs = scale(X)
Xs_train, Xs_test, y_train, y_test = train_test_split(Xs, y, test_size=0.2, random_state=42)
lr_2 = lr.fit(Xs_train, y_train)
print('Scaled Logistic Regression score for test set: %f' % lr_2.score(Xs_test, y_test))
y_true, y_pred = y_test, lr_2.predict(Xs_test)
print(classification_report(y_true, y_pred))
Scaled Logistic Regression score for test set: 0.740625
             precision    recall  f1-score   support

      False       0.79      0.74      0.76       179
       True       0.69      0.74      0.72       141

avg / total       0.74      0.74      0.74       320

Ini sangat menarik! Kinerja regresi logistik tidak meningkat dengan penskalaan data. Mengapa tidak, terutama ketika kita melihat bahwa kinerja k-Nearest Neighbours meningkat secara signifikan dengan scaling? Alasannya adalah, jika ada variabel prediktor dengan rentang besar yang tidak memengaruhi variabel target, algoritma regresi akan membuat koefisien terkait \(a_i\) menjadi kecil sehingga tidak terlalu memengaruhi prediksi. K-nearest neighbours tidak memiliki strategi bawaan seperti itu sehingga kita memang sangat perlu melakukan penskalaan data.

Pada artikel berikutnya, saya akan mengurai perbedaan hasil centering dan scaling pada k-NN dan regresi logistik dengan menyintesis sebuah kumpulan data, menambahkan noise, dan melihat bagaimana centering dan scaling mengubah kinerja kedua model sebagai fungsi dari kekuatan noise.

Pada jendela interaktif di bawah ini, Anda dapat bereksperimen sendiri dengan datanya. Anda dapat melakukan penskalaan data dengan menyetel sc = True, jika diinginkan. Kemudian jalankan seluruh skrip untuk melaporkan akurasi model regresi logistik, beserta classification report.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiaW1wb3J0IHBhbmRhcyBhcyBwZFxuaW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdFxuZnJvbSBza2xlYXJuLmNyb3NzX3ZhbGlkYXRpb24gaW1wb3J0IHRyYWluX3Rlc3Rfc3BsaXRcbmZyb20gc2tsZWFybiBpbXBvcnQgbmVpZ2hib3JzXG5mcm9tIHNrbGVhcm4ucHJlcHJvY2Vzc2luZyBpbXBvcnQgc2NhbGVcbmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBjbGFzc2lmaWNhdGlvbl9yZXBvcnRcbmZyb20gc2tsZWFybiBpbXBvcnQgbGluZWFyX21vZGVsIiwic2FtcGxlIjoiIyBTZXQgc2MgPSBUcnVlIHRvIHNjYWxlIHlvdXIgZmVhdHVyZXMgXG5zYyA9IEZhbHNlIFxuXG4jIExvYWQgZGF0YSBcbmRmID0gcGQucmVhZF9jc3YoJ2h0dHA6Ly9hcmNoaXZlLmljcy51Y2kuZWR1L21sL21hY2hpbmUtbGVhcm5pbmctZGF0YWJhc2VzL3dpbmUtcXVhbGl0eS93aW5lcXVhbGl0eS1yZWQuY3N2ICcgLCBzZXAgPSAnOycpIFxuWCA9IGRmLmRyb3AoJ3F1YWxpdHknICwgMSkudmFsdWVzICMgZHJvcCB0YXJnZXQgdmFyaWFibGUgXG5cbiMgSGVyZSB3ZSBzY2FsZSwgaWYgZGVzaXJlZCBcbmlmIHNjID09IFRydWU6IFxuICBYID0gc2NhbGUoWCkgXG4gIFxuIyBUYXJnZXQgdmFsdWUgXG55MSA9IGRmWydxdWFsaXR5J10udmFsdWVzICMgb3JpZ2luYWwgdGFyZ2V0IHZhcmlhYmxlIFxueSA9IHkxIDw9IDUgICMgbmV3IHRhcmdldCB2YXJpYWJsZTogaXMgdGhlIHJhdGluZyA8PSA1PyBcblxuIyBTcGxpdCB0aGUgZGF0YSBpbnRvIGEgdGVzdCBzZXQgYW5kIGEgdHJhaW5pbmcgc2V0IFhfdHJhaW4sIFhfdGVzdCwgeV90cmFpbiwgeV90ZXN0ID0gXG50cmFpbl90ZXN0X3NwbGl0KFgsIHksIHRlc3Rfc2l6ZT0wLjIsIHJhbmRvbV9zdGF0ZT00MikgXG5cbiMgVHJhaW4gbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbCBhbmQgcHJpbnQgcGVyZm9ybWFuY2Ugb24gdGhlIHRlc3Qgc2V0IFxubHIgPSBsaW5lYXJfbW9kZWwuTG9naXN0aWNSZWdyZXNzaW9uKCkgXG5sciA9IGxyLmZpdChYX3RyYWluLCB5X3RyYWluKSBcbnByaW50KCdMb2dpc3RpYyBSZWdyZXNzaW9uIHNjb3JlIGZvciB0cmFpbmluZyBzZXQ6ICVmJyAlIGxyLnNjb3JlKFhfdHJhaW4sIHlfdHJhaW4pKSBcbnlfdHJ1ZSwgeV9wcmVkID0geV90ZXN0LCBsci5wcmVkaWN0KFhfdGVzdCkgXG5wcmludChjbGFzc2lmaWNhdGlvbl9yZXBvcnQoeV90cnVlLCB5X3ByZWQpKSBcbiJ9

Glosarium

Pembelajaran terawasi (Supervised learning): Tugas menyimpulkan sebuah variabel target dari variabel prediktor. Misalnya, menyimpulkan variabel target ‘keberadaan penyakit jantung’ dari variabel prediktor seperti ‘usia’, ‘jenis kelamin’, dan ‘status perokok’.

Tugas klasifikasi: Tugas pembelajaran terawasi disebut tugas klasifikasi jika variabel target terdiri atas kategori (misalnya ‘klik’ atau ‘tidak’, tumor ‘ganas’ atau ‘jinak’).

Tugas regresi: Tugas pembelajaran terawasi disebut tugas regresi jika variabel target merupakan variabel yang bervariasi secara kontinu (misalnya harga rumah) atau variabel kategorikal berurutan seperti ‘peringkat kualitas wine’.

k-Nearest Neighbors: Algoritma untuk tugas klasifikasi, di mana sebuah titik data diberi label yang ditentukan oleh suara mayoritas dari k tetangga terdekatnya.

Prapemrosesan: Berbagai operasi yang digunakan data scientist untuk menyiapkan data agar lebih sesuai dengan tujuan yang ingin dicapai. Misalnya, sebelum melakukan analisis sentimen pada data Twitter, Anda mungkin ingin menghapus tag HTML, spasi kosong, menguraikan singkatan, dan memecah cuitan menjadi daftar kata yang dikandungnya.

Centering dan Scaling: Keduanya adalah bentuk prapemrosesan data numerik, yaitu data yang terdiri dari angka, bukan kategori atau string, misalnya; centering suatu variabel berarti mengurangkan nilai rata-rata variabel dari setiap titik data sehingga rata-rata variabel baru menjadi 0; scaling suatu variabel berarti mengalikan setiap titik data dengan suatu konstanta untuk mengubah rentang data. Lihat isi artikel untuk pentingnya kedua hal ini, beserta contohnya.

Artikel ini dihasilkan dari sebuah notebook Jupyter. Anda dapat mengunduh notebook-nya di sini.

Topik
Machine Learning
Python
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya