Notebook Bab 1 - Dari Data Mentah ke Representasi Model
Open In Colab
Notebook Bab 1 ini punya dua bagian. Bagian Demo tinggal Anda jalankan lalu amati keluarannya; bagian Mini Project berisi soal dan data yang Anda kerjakan sendiri.
Representasi (matriks fitur) menentukan batas atas yang bisa dipelajari model. Di notebook ini kita mengubah log transaksi mentah menjadi satu baris fitur per entitas.
Model dan data mentah sama; yang berbeda hanya representasinya. Kita bandingkan matriks fitur agregat melawan satu transaksi mentah per pengguna.
y = agg.index.map(tipe_user).to_numpy()# (A) dari matriks fitur agregatXtr, Xte, ytr, yte = train_test_split(agg, y, test_size=0.3, random_state=RANDOM_STATE, stratify=y)model = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=1000))]).fit(Xtr, ytr)acc_matriks = accuracy_score(yte, model.predict(Xte))# (B) dari satu transaksi mentah per pengguna (nominal saja)satu = log.groupby('id_user').first()[['nominal']]Xtr2, Xte2, ytr2, yte2 = train_test_split(satu, y, test_size=0.3, random_state=RANDOM_STATE, stratify=y)acc_mentah = accuracy_score(yte2, LogisticRegression(max_iter=1000).fit(Xtr2, ytr2).predict(Xte2))print(f'Akurasi dari matriks fitur agregat = {acc_matriks:.3f}')print(f'Akurasi dari satu transaksi mentah = {acc_mentah:.3f}')
Akurasi dari matriks fitur agregat = 0.989
Akurasi dari satu transaksi mentah = 0.656
🔎 Amati. Matriks fitur agregat memberi akurasi jauh di atas satu transaksi mentah. Model yang sama dan data mentah yang sama menghasilkan performa berbeda karena representasinya berbeda: itulah maksud representasi menentukan batas atas yang bisa dicapai model.
Section 2 - Mini Project
Soal
Anda menerima log klik (clickstream) sebuah situs, satu baris per klik, dengan kolom id_sesi, menit, halaman, dan durasi_detik. Tujuannya memprediksi konversi (1 = sesi berakhir dengan pembelian).
Tugas:
Ubah log peristiwa menjadi matriks fitur per sesi (minimal 5 fitur turunan, misalnya jumlah klik, total durasi, ragam halaman, durasi rata-rata).
Latih satu baseline classifier pada matriks itu.
Bandingkan dengan prediksi dari satu peristiwa mentah saja.
Luaran: kode agregasi, akurasi kedua pendekatan, dan 2-3 kalimat kesimpulan.
Kriteria penilaian: (a) agregasi benar ke tingkat sesi; (b) minimal 5 fitur turunan; (c) evaluasi pada data uji terpisah.
# DATA AWAL (jangan diubah) - clickstream: satu baris per klik.n_sesi =400konversi_sesi = {s: int(rng.random() <0.35) for s inrange(1, n_sesi +1)}baris = []for s inrange(1, n_sesi +1):for _ inrange(int(rng.integers(1, 20))): menit =round(float(rng.exponential(2.0)), 2) halaman = rng.choice(['home', 'produk', 'keranjang', 'promo', 'akun']) durasi =int(rng.integers(3, 120) + (30if konversi_sesi[s] else0)) baris.append((s, menit, halaman, durasi))clicks = pd.DataFrame(baris, columns=['id_sesi', 'menit', 'halaman', 'durasi_detik'])clicks['konversi'] = clicks['id_sesi'].map(konversi_sesi)print('Clickstream:', clicks.shape, '| sesi:', clicks['id_sesi'].nunique())clicks.head()
Clickstream: (4095, 5) | sesi: 400
id_sesi
menit
halaman
durasi_detik
konversi
0
1
0.04
promo
62
1
1
1
2.42
akun
51
1
2
1
3.86
produk
41
1
3
1
1.28
promo
89
1
4
1
1.09
produk
135
1
# Kerjakan di sini.# Petunjuk: clicks.groupby('id_sesi').agg(...) untuk membuat matriks fitur per sesi.