top of page
Gambar penulisCornellius Yudha Wijaya

Automasi Feature Engineering untuk Model Machine Learning

Sebagai Data Scientist, kita tahu bahwa bekerja dengan data adalah kegiatan sehari-hari kita. Mulai dari menarik data, menganalisis data, hingga membuat model machine learning yang berguna.


Meski banyak yang berpikir bahwa membuat model machine learning itu mudah, kenyataan mengatakan sebaliknya. Orang mungkin berpikir bahwa kita hanya perlu mengetik beberapa baris kode bahasa pemrograman dan voila! Model machine learning sudah selesai.


Mungkin saja bisa seperti itu, tetapi apakah model tersebut bermanfaat dan memiliki dampak pada masalah bisnis? Seringkali tidak. Karena dalam kehidupan nyata data sering kali berantakan, dan tanpa pengukuran yang tepat itu akan mengarah pada model yang cacat.

Salah satu cara yang telah terbukti meningkatkan performa model machine learning adalah dengan membuat fitur baru dari fitur yang sudah ada atau disebut feature engineering.


Konsep feature engineering mudah dipahami, karena idenya adalah membuat fitur baru dari fitur yang sudah ada. Misalnya, kita memiliki data harga produk dan beratnya.

Dari kedua fitur ini, kita bisa membuat fitur baru. Misalnya, harga produk per gram. Kita perlu membagi harga dengan berat produk.

Dengan cara seperti itu, kita mendapatkan fitur baru. Inilah konsep dari feature engineering.

Inti dari model machine learning adalah data, dan cara meningkatkan performanya adalah dengan Feature Engineering, meskipun dibutuhkan banyak keterampilan untuk menguasai Feature Engineering. Kita perlu kreatif dan memahami domain bisnis. Hal ini tentu akan memakan banyak waktu.


Untuk menyelesaikan sebagian dari masalah feature engineering, kita dapat mengotomatisasi proses feature engineering yang memakan banyak waktu.


Automated Feature Engineering

Salah satu library open-source untuk melakukan automated feature engineering adalah Featuretools. Ini adalah library yang dirancang untuk mempercepat proses generasi fitur dengan mengotomatisasi prosesnya.


Pada Featuretools, ada tiga komponen utama yang perlu kita ketahui, yaitu:

  • Entities

  • Deep Feature Synthesis (DFS)

  • Feature primitives


Penjelasannya sebagai berikut:

  • Entities adalah representasi dari Pandas DataFrame dalam Featuretools. Beberapa entities disebut sebagai Entityset.

  • Deep Feature Synthesis (DFS) adalah metode Feature Engineering dari Featuretools. Ini adalah metode yang digunakan untuk membuat fitur baru dari satu dan beberapa data frame.

  • DFS membuat fitur dengan menerapkan Feature primitives ke hubungan Entity dalam Entityset. Feature primitives adalah apa yang kita sebut sebagai metode untuk menghasilkan fitur secara manual, primitive mean akan menjadi mean dari suatu variabel pada tingkat agregat.

Saya rasa cukup dasar teori; mari kita beralih ke penggunaan dari alat-alat tersebut. Pertama, kita perlu menginstal library terlebih dahulu.

pip install featuretools

Featuretools paling baik digunakan dengan beberapa dataset yang memiliki banyak hubungan. Dalam hal ini, saya akan menggunakan Olist Brazallian E-Commerce Dataset dari Kaggle.


Data ini berupa file CSV dan terdiri dari banyak data. Kali ini, saya akan memilih beberapa data sebagai contoh.

olist_items = pd.read_csv('olist_order_items_dataset.csv')
olist_product = pd.read_csv('olist_products_dataset.csv')
olist_customer = pd.read_csv('olist_customers_dataset.csv')
olist_order = pd.read_csv('olist_orders_dataset.csv')

Mari kita lihat data secara singkat. Pertama, mari kita lihat data olist_customer.

Kita dapat melihat data ini berisi variabel unik sebagai identifikasi bernama ‘customer_id’. Variabel ini akan diperlukan saat kita ingin menggunakan Featuretools karena Entity untuk Feature Engineering akan menggunakan variabel unik ini sebagai penanda pengelompokan.


Mari kita juga lihat data olist_order.


Kita dapat melihat bahwa data olist_order berisi variabel ‘order_id’ sebagai identifikasi dan juga variabel ‘customer_id’ untuk menunjukkan siapa yang melakukan pesanan.


Selanjutnya, saya ingin mendapatkan data produk dan nomor item yang dipesan, tetapi karena tersebar di dua dataset, saya akan menggabungkannya menjadi satu. Saya juga akan menghapus beberapa fitur yang tidak perlu dan mengatur ulang indeks untuk identifikasi.

olist_item_product = pd.merge(olist_items, olist_product, on = 'product_id')
olist_item_product.drop(['order_item_id', 'seller_id'], axis =1, inplace = True)
olist_item_product.reset_index(inplace = True)

Sekarang kita telah memiliki semua dataset yang kita butuhkan. Mari mencoba mengotomatisasi Feature Engineering menggunakan Featuretools.


Pertama, yang perlu kita persiapkan adalah Entities untuk melakukan DFS. Jadi, apa yang sebenarnya perlu kita siapkan dalam Entities? Seperti yang saya sebutkan sebelumnya, Entities adalah representasi data frame. Pada kasus Entities, kita akan menyiapkan dictionary dengan nama Entity dan data frame sebagai identifikasi.


Contoh entity dijelaskan di bawah ini.

#We prepare the dictionary with the specification is
#'name of the entity' : (dataframe, identification)
entities = {
    "customer" : (olist_customer, 'customer_id'),
    "order": (olist_order, 'order_id'),
    'item_product':(olist_item_product, 'index')
}

Selanjutnya, kita perlu menentukan bagaimana entities tersebut berhubungan. Ketika dua entities memiliki hubungan one-to-many, kita menyebut entity “one” sebagai “parent entity” dan “many” sebagai “child entity”. Hubungan antara parent dan child didefinisikan seperti ini.

#The relationship are defined by the entitiy name and the variable identification
(parent_entity, parent_variable, child_entity, child_variable)
#Example
relationships = [
('customer', 'customer_id', 'order', 'customer_id'), 
('order', 'order_id', 'item_product', 'order_id')
]

Pada contoh di atas, saya mendefinisikan hubungan antara entity ‘customer’ dan entity ‘order’ dengan variabel ‘customer_id’, yang ada di kedua dataset.


Sekarang saatnya mengotomatisasi feature engineering. Ini mudah dilakukan; Anda hanya perlu mengikuti kode di bawah ini. Perlu diingat bahwa proses ini akan memakan waktu, karena dataset cukup besar.

import featuretools as ft

feature_matrix_customers, features_defs = ft.dfs(
entities=entities,                                                 
relationships=relationships,
target_entity="customer")

Dari kode di atas, saya akan menjelaskannya sedikit. Metode untuk membuat otomatisasi adalah DFS, seperti yang saya jelaskan sebelumnya. Metode DFS menerima tiga parameter, yaitu:


  • entities

  • relationships

  • entity target

Dua parameter pertama adalah apa yang kita buat sebelumnya, dan yang terakhir “entity target” adalah pengelompokan untuk agregasi. Dalam contoh kita di bawah ini, katakanlah kita ingin feature engineering berdasarkan tingkat customer.


Setelah proses selesai, kita dapat melihat bahwa kita mendapatkan banyak fitur baru berdasarkan agregasi customer.

feature_matrix_customers.columns

Seperti yang dapat kita lihat pada gambar di atas, sekarang kita memiliki 410 fitur karena adanya automated feature engineering.


Jika Anda penasaran bagaimana cara membaca beberapa nama kolom tersebut, saya akan menjelaskannya sedikit. Ambil contoh SUM(item_product.price). Kolom ini berarti ini adalah jumlah harga dari entity item_product pada tingkat agregat customer. Jadi, dengan istilah yang lebih manusiawi, ini adalah total harga item yang dibeli oleh pelanggan.


Langkah berikutnya adalah men-develop model machine learning dengan data yang baru saja kita hasilkan. Meskipun kita telah membuat fitur, apakah itu bermanfaat tentu akan memerlukan lebih banyak eksperimen. Hal yang terpenting adalah kita berhasil mengotomatiskan aspek pengembangan model yang memakan waktu.


Kesimpulan

Feature Engineering adalah aspek penting dalam pengembangan model machine learning karena berdampak pada model machine learning kita. Namun, proses ini bisa memakan waktu.


Dalam hal ini, kita dapat menggunakan library open-source bernama Featuretools untuk mengotomatisasi proses Feature Engineering.


Tiga istilah yang perlu diingat dari Featuretools adalah Entity, Deep Feature Synthesis, Feature Primitives.


Jika Anda ingin membaca lebih lanjut tentang Featuretools, Anda bisa mengunjungi halaman website-nya di sini.


Semoga bermanfaat!

Artikel ditranslasi oleh: Ahmad Ilham Habibi

15 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page