7 Itinerators Python untuk Feature Engineering yang Praktis
VOXBLICK.COM - Dalam dunia machine learning, fitur adalah raja. Sebagus apapun model yang kamu gunakan, jika fitur yang kamu berikan kurang informatif atau tidak relevan, hasilnya pasti tidak akan optimal. Ibarat membangun kebiasaan baik, pondasi yang kuat adalah kuncinya. Begitu pula dengan feature engineering ia adalah fondasi untuk performa model yang luar biasa.
Seringkali, proses menciptakan fitur-fitur barubaik itu interaksi, polinomial, atau fitur kumulatifbisa terasa repetitif dan memakan banyak kode. Di sinilah modul itertools Python datang sebagai penyelamat. Modul ini menyediakan fungsi-fungsi yang efisien dan elegan untuk bekerja dengan iterator, membantu kamu merapikan dan mempercepat pipeline data. Anggap saja ini adalah "kebiasaan-kebiasaan kecil" yang bisa langsung kamu terapkan untuk meningkatkan produktivitas feature engineering-mu.
Mari kita selami 7 fungsi itertools Python yang praktis dan bisa langsung kamu gunakan untuk membuat fitur-fitur yang lebih kaya dan bermakna.
1. itertools.combinations: Menggali Interaksi Fitur
Fitur interaksi adalah kunci untuk menangkap hubungan non-linear antar variabel. Misalnya, "usia pendapatan" mungkin lebih prediktif daripada usia atau pendapatan saja. Menggunakan itertools.
combinations, kamu bisa dengan mudah menghasilkan semua kombinasi unik dari fitur-fitur numerik untuk menciptakan fitur interaksi.
Bagaimana menerapkannya secara praktis: Daripada menulis loop berlapis-lapis, combinations memberikan cara yang bersih dan efisien untuk menemukan semua pasangan atau kelompok fitur yang bisa berinteraksi.
Ini sangat berguna ketika kamu memiliki banyak fitur dan ingin mengeksplorasi potensi interaksi tanpa perlu menulis kode yang panjang dan rawan kesalahan.
import itertools
import pandas as pd
data = fitur_A: 10, 20, 30, fitur_B: 2, 3, 4, fitur_C: 5, 6, 7
df = pd.DataFrame(data)
# Pilih fitur yang ingin diinteraksikan
numerical_features = fitur_A, fitur_B, fitur_C
# Buat fitur interaksi dari semua kombinasi 2 fitur
for f1, f2 in itertools.combinations(numerical_features, 2):
dfff1_x_f2 = dff1 dff2
print(df)
Outputnya akan menunjukkan kolom-kolom baru seperti fitur_A_x_fitur_B, fitur_A_x_fitur_C, dan fitur_B_x_fitur_C.
2. itertools.product: Kombinasi Lengkap untuk Fitur Kategorikal
Mirip dengan combinations, namun product menghasilkan produk Kartesian, artinya semua kemungkinan kombinasi termasuk urutan berbeda dan pengulangan.
Ini sangat berguna untuk menciptakan fitur interaksi dari fitur kategorikal atau ketika kamu ingin semua kemungkinan pasangan nilai antar kolom.
Bagaimana menerapkannya secara praktis: Bayangkan kamu ingin membuat fitur yang menunjukkan kombinasi spesifik dari dua kategori, misalnya "Kota_A & Status_Pelanggan_Premium".
product memungkinkan kamu mengeksplorasi semua kemungkinan kombinasi nilai dari dua atau lebih kolom kategorikal secara sistematis.
import itertools
import pandas as pd
data = kota: Jakarta, Surabaya, status: Gold, Silver
df_kategorikal = pd.DataFrame(data)
# Buat semua kombinasi pasangan kota dan status
all_combinations = list(itertools.product(df_kategorikalkota, df_kategorikalstatus))
# Ini mungkin lebih relevan jika kamu ingin membuat fitur interaksi
# dari dua kolom yang berbeda dalam DataFrame utama atau untuk eksplorasi
# Contoh lain: membuat semua kombinasi kategori untuk one-hot encoding
# Misal: dfkota_status = dfkota + _ + dfstatus
# Atau untuk membuat fitur interaksi dari dua kolom kategorikal yang sudah ada:
# dfkota_x_status = dfkota.astype(str) + _ + dfstatus.astype(str)
# Untuk tujuan demonstrasi product yang lebih jelas dalam FE:
# Misal kamu punya dua list fitur kategorikal dan ingin semua kombinasi
fitur_kategori1 = A, B
fitur_kategori2 = X, Y, Z
# Membuat semua pasangan untuk potensi fitur interaksi
interaksi_kategorikal = list(itertools.product(fitur_kategori1, fitur_kategori2))
# Hasil: (A, X), (A, Y), (A, Z), (B, X), (B, Y), (B, Z)
# Ini bisa digunakan untuk membuat kolom baru atau untuk strategi encoding tertentu.
print(interaksi_kategorikal)
3. itertools.accumulate: Fitur Kumulatif yang Elegan
Fitur kumulatif, seperti jumlah kumulatif, rata-rata bergerak, atau produk kumulatif, seringkali sangat informatif dalam data deret waktu atau ketika urutan data penting. itertools.accumulate adalah cara yang sangat Pythonic dan efisien untuk menghitungnya.
Bagaimana menerapkannya secara praktis: Bayangkan kamu ingin melacak total penjualan dari waktu ke waktu atau melihat bagaimana performa saham berakumulasi. accumulate memungkinkan kamu melakukan ini dengan satu baris kode, tanpa perlu loop manual yang lambat dan berpotensi error. Ini membuat pipeline data-mu jauh lebih rapi.
import itertools
import pandas as pd
import operator
data = penjualan: 10, 15, 5, 20, 12
df = pd.DataFrame(data)
# Hitung jumlah kumulatif
dfpenjualan_kumulatif = list(itertools.accumulate(dfpenjualan))
# Contoh lain: produk kumulatif
dfpenjualan_prod_kumulatif = list(itertools.accumulate(dfpenjualan, operator.mul))
print(df)
4. itertools.groupby: Agregasi Berbasis Kelompok
Ketika kamu perlu melakukan agregasi pada subkelompok data (misalnya, rata-rata pendapatan per kota, atau jumlah transaksi per pelanggan), groupby dari itertools adalah alat yang ampuh. Meskipun Pandas memiliki groupby yang lebih komprehensif, versi itertools sangat efisien untuk operasi berbasis iterator.
Bagaimana menerapkannya secara praktis: Ini adalah fondasi untuk banyak fitur agregasi yang kuat.
Jika kamu ingin menambahkan fitur ke setiap baris yang mencerminkan karakteristik kelompoknya (misalnya, rata-rata usia di lingkungan yang sama), groupby adalah cara yang efisien untuk mendapatkan data tersebut. Ingat, data harus diurutkan berdasarkan kunci pengelompokan terlebih dahulu!
import itertools
import pandas as pd
data = kota: Jakarta, Bandung, Jakarta, Surabaya, Bandung,
pendapatan: 5000, 3000, 6000, 4000, 3500
df = pd.DataFrame(data).sort_values(by=kota) # Penting: groupby itertools membutuhkan data terurut!
# Agregasi rata-rata pendapatan per kota
grouped_data =
for key, group in itertools.groupby(df.to_dict(records), key=lambda x: xkota):
total_pendapatan = sum(itempendapatan for item in group)
count = len(list(group)) # group is an iterator, so convert to list to count
grouped_data.append(kota: key, rata_rata_pendapatan: total_pendapatan / count)
df_agg = pd.DataFrame(grouped_data)
print(df_agg)
Catatan: Untuk kasus groupby yang lebih kompleks dengan DataFrame, Pandas .groupby() mungkin lebih intuitif. Namun, itertools.groupby sangat efisien untuk data yang sudah terurut atau ketika bekerja langsung dengan iterator.
5. itertools.starmap: Menerapkan Fungsi Multi-Argumen
starmap mirip dengan map, tetapi ia menerima fungsi yang mengambil beberapa argumen dan menerapkan fungsi tersebut ke elemen-elemen dari iterable input yang sudah "di-unpack".
Ini sangat berguna untuk menciptakan fitur polinomial atau transformasi kustom lainnya yang melibatkan beberapa kolom.
Bagaimana menerapkannya secara praktis: Bayangkan kamu ingin menghitung (fitur_A^2) + (fitur_B fitur_C).
Dengan starmap, kamu bisa mendefinisikan fungsi kustom yang menerima tiga argumen, lalu menerapkannya ke baris-baris data dari kolom yang sesuai. Ini adalah cara yang bersih untuk membuat fitur-fitur kompleks dari beberapa input secara efisien.
import itertools
import pandas as pd
data = fitur_X: 1, 2, 3, fitur_Y: 4, 5, 6
df = pd.DataFrame(data)
# Fungsi untuk membuat fitur polinomial sederhana
def custom_poly_feature(x, y):
return x2 + y
# Terapkan fungsi ke setiap baris menggunakan starmap
dffitur_poly_XY = list(itertools.starmap(custom_poly_feature, zip(dffitur_X, dffitur_Y)))
print(df)
6. itertools.repeat: Fitur Konstanta atau Pengulangan Nilai
Meskipun sederhana, repeat bisa sangat berguna dalam skenario tertentu, seperti membuat fitur konstanta baru untuk semua baris atau mengulang nilai tertentu dalam operasi feature engineering yang lebih kompleks. Ini juga sering digunakan bersama dengan fungsi itertools lainnya.
Bagaimana menerapkannya secara praktis: Pernahkah kamu perlu menambahkan kolom baru dengan nilai yang sama di semua baris, misalnya, "tahun_analisis_2023" atau "nilai_default_1"? repeat memungkinkan kamu membuat
iterator dari nilai tersebut tanpa perlu membuat daftar panjang yang memakan memori. Ini juga bisa menjadi bagian dari proses yang lebih besar, misalnya ketika kamu ingin mengulang suatu operasi sebanyak N kali.
import itertools
import pandas as pd
data = id: 1, 2, 3, 4, 5
df = pd.DataFrame(data)
# Tambahkan fitur konstanta is_active = True
dfis_active = list(itertools.repeat(True, len(df)))
# Contoh lain: mengulang operasi (misal untuk padding)
# list(itertools.repeat(0, 5)) -> 0, 0, 0, 0, 0
print(df)
7. itertools.zip_longest: Menggabungkan Urutan Fitur yang Tak Sama
zip_longest adalah varian dari fungsi zip bawaan Python. Bedanya, zip_longest akan terus menggabungkan iterables sampai iterable terpanjang habis, mengisi nilai yang hilang dengan fillvalue yang ditentukan. Ini sangat berguna ketika kamu menggabungkan daftar fitur yang mungkin memiliki panjang yang berbeda.
Bagaimana menerapkannya secara praktis: Bayangkan kamu memiliki dua daftar fitur yang ingin kamu gabungkan, tetapi panjangnya tidak selalu sama.
Jika kamu menggunakan zip biasa, data dari daftar yang lebih panjang akan terpotong. zip_longest memastikan semua data dipertahankan, mengisi celah dengan nilai yang kamu inginkan (misalnya, None atau 0). Ini penting untuk memastikan tidak ada informasi yang hilang saat kamu merangkai fitur dari sumber yang berbeda.
import itertools
import pandas as pd
fitur_A_list = 10, 20, 30
fitur_B_list = 2, 3 # Lebih pendek dari fitur_A_list
# Menggunakan zip_longest untuk menggabungkan, mengisi dengan None
combined_features = list(itertools.zip_longest(fitur_A_list, fitur_B_list, fillvalue=0))
# Jika kamu ingin membuat DataFrame dari ini:
df_combined = pd.DataFrame(combined_features, columns=fitur_A_val, fitur_B_val)
print(df_combined)
Mengintegrasikan itertools ke dalam pipeline feature engineering-mu adalah salah satu "kebiasaan baik" yang bisa kamu mulai hari ini. Fungsi-fungsi ini tidak hanya membuat kodemu lebih ringkas dan mudah dibaca, tetapi juga seringkali lebih efisien dalam hal kinerja, terutama ketika berhadapan dengan dataset besar. Dengan menguasai itertools, kamu tidak hanya akan menjadi seorang data scientist yang lebih produktif, tetapi juga mampu menciptakan fitur-fitur yang lebih canggih dan berdampak. Jadi, tunggu apa lagi? Mulailah bereksperimen dan lihat bagaimana itertools bisa mengubah cara kamu melakukan feature engineering!
Apa Reaksi Anda?
Suka
0
Tidak Suka
0
Cinta
0
Lucu
0
Marah
0
Sedih
0
Wow
0