Interaksi dan Rasio

Interaksi antar-fitur dan rasio yang menggerakkan metrik lebih dari fitur mentah.

Daftar isi

Dua fitur yang sama-sama lemah dapat menjadi sinyal yang kuat apabila keduanya digabung dengan cara yang benar. Topik ini membahas dua bentuk penggabungan yang paling sering berguna, yaitu interaksi berupa perkalian antar-fitur dan rasio berupa pembagian dua fitur yang maknanya baru muncul saat dihitung bersama. Praktiknya menggunakan data statistik nilai ujian dalam sebuah DataFrame beserta skrip interaksi-dan-rasio.py, yang menaikkan kompleksitas fitur bertahap dan mengukur setiap tahapnya pada data uji. Setelah topik ini, kandidat interaksi dan rasio dapat dicari secara terarah berdasarkan mekanisme domain, bukan dengan mencoba semua pasangan.

Interaksi: efek satu fitur bergantung pada fitur lain#

Interaksi antar-fitur terjadi apabila sumbangan satu fitur terhadap target bergantung pada nilai fitur lain. Jam belajar yang panjang hanya efektif apabila kehadiran juga tinggi, sedangkan jam belajar tanpa kehadiran hampir tidak berpengaruh. Pola saling menguatkan seperti itu tidak dapat dinyatakan oleh jumlah berbobot biasa. Bentuk paling sederhananya ditambahkan sebagai kolom hasil perkalian, sehingga model linear bekerja dengan persamaan berikut.

y^=w0+w1x1+w2x2+w3 x1x2 \hat{y} = w_0 + w_1 x_1 + w_2 x_2 + w_3\, x_1 x_2

Persamaan itu tetap linear terhadap setiap bobot, tetapi prediksinya kini melengkung terhadap fitur asal karena besarnya efek perubahan x1 x_1 bergantung pada nilai x2 x_2 . Perhatikan bahwa model linear tidak memiliki cara menemukan suku perkalian itu sendiri, sebab pembentukan fitur berada di luar tugas pelatihan. Menyediakan kolom hasil kali adalah pekerjaan penciptaan fitur, dan kolom itulah yang memindahkan hubungan saling menguatkan ke dalam jangkauan model.

Interaksi juga berbeda dari korelasi biasa antarfitur. Dua fitur yang masing-masing berkorelasi dengan target belum tentu berinteraksi, sebab korelasi hanya menangkap hubungan berbanding lurus satu arah. Sebaliknya, dua fitur yang korelasinya lemah dapat membentuk interaksi yang kuat, sebagaimana jam belajar dan kehadiran pada data contoh yang saling mensyaratkan. Karena itu interaksi dicari melalui penalaran mekanisme, sedangkan korelasi berpasangan hanya menjadi petunjuk awal yang mudah keliru.

Rasio: dua fitur menjadi satu makna#

Rasio menggabungkan dua fitur dengan pembagian, dan hasilnya kerap menyatakan besaran yang lebih bermakna daripada kedua penyusunnya. Kecepatan membaca muncul dari halaman dibagi durasi, kepadatan penduduk muncul dari jumlah penduduk dibagi luas wilayah, dan beban belajar per mata kuliah muncul dari jam belajar dibagi jumlah mata kuliah. Pada contoh terakhir, mahasiswa dengan 20 jam belajar untuk empat mata kuliah berada dalam posisi yang sangat berbeda dengan mahasiswa yang menempuh jam yang sama untuk delapan mata kuliah, meskipun kolom jam_belajar keduanya identik.

Model linear memperlakukan kedua penyusun rasio secara terpisah, sehingga makna “per satuan” pada rasio hilang di tengah penjumlahan. Menambahkan kolom rasio memindahkan makna tersebut ke dalam satu angka yang dapat diberi bobot langsung. Rasio juga menyetarakan perbandingan antarbaris karena satuan yang dipakai menjadi sama, yaitu beban per mata kuliah, meskipun besarnya nilai mentah berbeda antarbaris. Rasio termasuk fitur hasil ciptaan yang hipotesisnya bersumber dari pengetahuan domain, sehingga kekuatannya kembali diuji dengan pemecahan data yang disiplin.

Bukti pada data nilai ujian#

Skrip membangun 320 baris catatan nilai ujian dengan tiga fitur mentah, yaitu jam_belajar, kehadiran, dan jumlah_mk. Mekanisme sebenarnya yang ditanamkan pada data memuat gabungan belajar dan kehadiran sebagai interaksi, beban per mata kuliah sebagai rasio, ditambah pengaruh kecil kehadiran dan derau pengukuran. Skrip lalu menaikkan kompleksitas fitur dalam tiga tahap, mulai dari fitur mentah, ditambah interaksi belajar_x_hadir, hingga ditambah rasio jam_per_mk, dan mencetak skor data uji untuk setiap tahap.

python interaksi-dan-rasio.py
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# statistik nilai ujian: nilai dipengaruhi interaksi dan rasio antarfitur
rng = np.random.default_rng(42)
n = 320
jam_belajar = rng.uniform(2.0, 25.0, n)   # jam belajar per minggu
kehadiran = rng.uniform(50.0, 100.0, n)   # persen kehadiran
jumlah_mk = rng.integers(2, 7, n)         # jumlah mata kuliah yang diambil

df = pd.DataFrame({
    "jam_belajar": jam_belajar.round(1),
    "kehadiran": kehadiran.round(0),
    "jumlah_mk": jumlah_mk,
})

# mekanisme sebenarnya: paduan belajar-hadir dan beban per mata kuliah
z_jam = (jam_belajar - jam_belajar.mean()) / jam_belajar.std()
z_hadir = (kehadiran - kehadiran.mean()) / kehadiran.std()
z_rasio = (jam_belajar / jumlah_mk)
z_rasio = (z_rasio - z_rasio.mean()) / z_rasio.std()
df["nilai"] = np.round(
    40.0 + 0.18 * kehadiran + 4.0 * z_jam * z_hadir + 4.5 * z_rasio + rng.normal(0.0, 2.0, n),
    1,
)

print(df.head())
print("\nKorelasi fitur mentah dengan nilai:")
print(df.corr()["nilai"].round(3))

# penciptaan fitur interaksi dan rasio
df["belajar_x_hadir"] = df["jam_belajar"] * df["kehadiran"]
df["jam_per_mk"] = df["jam_belajar"] / df["jumlah_mk"]

y = df["nilai"]

idx = np.arange(n)
idx_latih, idx_uji = train_test_split(idx, test_size=0.2, random_state=42)
y_latih, y_uji = y.iloc[idx_latih], y.iloc[idx_uji]

konfigurasi = {
    "fitur mentah                   ": ["jam_belajar", "kehadiran", "jumlah_mk"],
    "fitur mentah + interaksi       ": ["jam_belajar", "kehadiran", "jumlah_mk", "belajar_x_hadir"],
    "fitur mentah + interaksi+rasio ": [
        "jam_belajar", "kehadiran", "jumlah_mk", "belajar_x_hadir", "jam_per_mk",
    ],
}

for nama, kolom in konfigurasi.items():
    model = LinearRegression().fit(df.loc[idx_latih, kolom], y_latih)
    print(f"R2 {nama}: {model.score(df.loc[idx_uji, kolom], y_uji):.4f}")
text Keluaran
   jam_belajar  kehadiran  jumlah_mk  nilai
0         19.8       96.0          5   66.4
1         12.1       74.0          5   53.6
2         21.7       66.0          3   55.0
3         18.0       77.0          6   55.2
4          4.2       92.0          3   46.1

Korelasi fitur mentah dengan nilai:
jam_belajar    0.462
kehadiran      0.402
jumlah_mk     -0.408
nilai          1.000
Name: nilai, dtype: float64
R2 fitur mentah                   : 0.5901
R2 fitur mentah + interaksi       : 0.8400
R2 fitur mentah + interaksi+rasio : 0.9052

Korelasi pada keluaran memperlihatkan mengapa fitur mentah terbatas, yaitu setiap kolom hanya berkorelasi sekitar 0.4 terhadap target karena kekuatan sebenarnya baru muncul pada gabungan antarkolom. Menambahkan interaksi menaikkan R2 R^2 dari 0.5901 menjadi 0.8400, dan menambahkan rasio melengkapinya menjadi 0.9052 pada data uji. Kenaikan bertahap ini sekaligus menjadi alat diagnosis, karena tahap yang memberi lonjakan terbesar menunjukkan jenis hubungan yang belum tertangkap oleh fitur sebelumnya. Seluruh tahap menggunakan pemecahan indeks dan model yang sama, sehingga perbandingan antartahap bersih dari pengaruh lain.

Kesalahan umum#

  • Membuat semua pasangan interaksi sekaligus. Dengan 30 fitur mentah, suku perkalian otomatis menghasilkan ratusan kolom tambahan yang memicu overfitting dan memperlambat pelatihan. Susun kandidat dari penalaran domain, uji satu per satu, dan bandingkan skornya.
  • Membagi dengan fitur yang dapat bernilai nol atau sangat kecil. Rasio terhadap penyebut nol menghasilkan nilai tak hingga dan menggagalkan pelatihan. Amati rentang penyebut terlebih dahulu, lalu tambahkan konstanta kecil atau kelompokkan nilai penyebut yang terlalu kecil.
  • Membaca koefisien fitur turunan seperti koefisien fitur mentah. Koefisien pada suku interaksi menyatakan efek bersama dua fitur, sehingga penafsirannya berbeda dari koefisien utama. Laporkan efeknya melalui prediksi pada beberapa kombinasi nilai, bukan hanya angka koefisiennya.
  • Mengalikan dua fitur yang rentangnya berbeda jauh tanpa penskalaan terlebih dahulu. Nilai fitur berskala besar mendominasi hasil kali, sehingga kolom interaksi praktis hanya meniru salah satu fiturnya dan sumbangan fitur yang lain menghilang. Standarkan kedua fitur terlebih dahulu agar keduanya berkontribusi setara pada hasil kali.

Ringkasan#

  • Interaksi berupa kolom hasil kali menanamkan efek bersyarat, yaitu sumbangan satu fitur yang besarnya bergantung pada fitur lain.
  • Rasio berupa kolom hasil bagi menyatukan dua penyusun menjadi satu besaran yang bermakna, seperti beban per mata kuliah.
  • Pada data nilai ujian, interaksi menaikkan R2 R^2 uji dari 0.5901 menjadi 0.8400 dan rasio melengkapinya menjadi 0.9052 dengan model dan pemecahan yang sama.
  • Kandidat interaksi dan rasio disusun dari mekanisme domain dan diuji bertahap, bukan dihasilkan secara otomatis tanpa pertimbangan.

Referensi#