Final Project ini disusun sebagai salah satu syarat untuk menyelesaikan Data Science Career Bootcamp di Rakamin.
Image by Namogoo
- Dimas as Data Science Team Lead, Data Scientist
- Dila as Data Scientist
- Lana as Data Analyst
- Ucup as Data Analyst
- Aulia as Business Intelligence Analyst
- Keven as Business Intelligence Analyst
- Andre as Machine Learning Engineer
.
├── Dataset/ : contains csv file
│ ├── about.txt : about dataset
│ ├── online_shoppers_intention.csv : Online Shoppers Purchasing Intention dataset
│ ├── test.csv : test set
│ └── train.csv : train set
├── Images : contains images
├── Notebooks/ : contains ipynb file
│ ├── 1_Exploratory_Data_Analysis.ipynb : Data analytics process to understand the data in depth
│ ├── 2_Data_Preprocessing.ipynb : Data preprocessing for machine learning (ML)
│ └── 3_Modeling.ipynb : Random Forest model to predict the customers purchase intention
├── LICENSE : MIT License
├── README.md : Report
└── requirements.txt : requirements to run this model
Dataset Online Shoppers Purchasing Intention merupakan dataset yang dibentuk secara khusus, sehingga setiap sesi akan dimiliki oleh pelanggan yang berbeda selama periode 1 tahun. Dataset ini terdiri dari 12.330 baris dan 18 kolom fitur, setiap baris berisi data yang berkaitan dengan sesi kunjungan (waktu yang dihabiskan) pelanggan pada website e-commerce.
Feature Name | Feature Description |
---|---|
Administrative |
Number of times the visitor visited the administrative section |
Administrative_Duration |
Total time the user spent in the administrative section |
Informational |
Number of times the visitor visited the informational section |
Informational_Duration |
Total time the user spent in the informational section |
ProductRelated |
Number of times the visitor visited the related products section |
ProductRelated_Duration |
Total time the user spent in the related products section |
BounceRates |
Average bounce rate value of the pages visited by the visitor |
ExitRates |
Average exit rate value of the pages visited by the visitor |
PageValues |
Average page value of the pages visited by the visitor |
SpecialDay |
The proximity to a special date |
Notes:
- For all pageviews to the page, Exit Rate is the percentage that were the last in the session.
- For all sessions that start with the page, Bounce Rate is the percentage that were the only one of the session.
- Page Value is the average value for a page that a visitor visited before completing an Ecommerce transaction.
Feature Name | Feature Description |
---|---|
Month |
Month of the visit to the website |
OperatingSystems |
Type of operating system |
Browser |
Name of the web browser |
Region |
Visitor's geographic region |
TrafficType |
Type of the web traffic |
VisitorType |
Type of the visitor as "New Visitor", "Returning Visitor", and "Other" |
Weekend |
"True" indicates that it is a weekend day |
Feature Name | Feature Description |
---|---|
Revenue |
"True" indicates that the visitor has purchased |
Dataset ini memiliki dimensi data, yaitu
- Jumlah baris: 12.330
- Jumlah kolom: 18
Untuk mendapatkan ringkasan singkat tentang dataset, kami menggunakan fungsi info()
. Hasil observasi yang didapatkan adalah sebagai berikut.
- Dari total 18 kolom, ada 4 kolom atau fitur dengan tipe data yang kurang sesuai, yaitu
OperatingSystems
,Browser
,Region
, danTrafficType
, seharusnya string bukan integer, karena kemungkinan sudah melalui proses label encoding, sedangkan kolom lainnya sudah sesuai. - Tidak ada kolom yang memiliki nilai kosong atau missing values.
- Tipe data berupa boolean (2), float (7), integer (7), dan string (2).
Untuk memastikan adanya missing values dalam dataset, kita menggunakan metode isna()
.
- Tidak ada kolom yang null (bernilai None ataupun NaN).
Untuk menemukan adanya duplicates, kita menggunakan metode duplicated()
. Ternyata ditemukan data duplikat sebanyak 127 baris. Walaupun demikian, kita berasumsi bahwa data tersebut merupakan data unik, yang terkait dengan sesi kunjungan pelanggan.
Untuk mencari elemen unik dalam dataset, kita menggunakan fungsi nunique()
.
- Fitur
Administrative_Duration
,Informational_Duration
, danProductRelated_Duration
memiliki elemen unik atau kategori yang cukup banyak, sehingga kita bisa melakukan feature selection/dimensionality reduction atau kita bisa buat fitur baruTotalPage_Duration
atauAvgPage_Duration
. - Fitur
Administrative
,Informational
, danProductRelated
juga bisa buat fitur baruTotalPage
atauAvgPage
. - Fitur
BounceRates
,ExitRates
, danPageValues
akan dipertahankan.
Untuk mendapatkan perincian statistik dasar dari dataset, kita menggunakan metode describe()
.
Dalam fitur numerikal, ada perbedaan yang signifikan antara mean dan median (P50), yaitu nilai mean > median, karena kemungkinan dipengaruhi oleh adanya outlier atau pencilan, sehingga distribusi data akan cenderung menceng ke kanan atau positively skewed.
Berikut ini nilai yang paling umum dalam fitur kategorikal, berturut-turut adalah:
Month
: May (27,3%),OperatingSystems
: 2 (53,5%),Browser
: 2 (64,6%),Region
: 1 (38,8%),TrafficType
: 2 (31,7%),VisitorType
: Returning_Visitor (85,6%),Weekend
: 0 atau False (76,7%), danRevenue
: 0 atau False (84,5%).
Dalam fitur kategorikal, ada 5 dari 8 fitur memiliki kategori yang sangat mendominasi (dengan proporsi > 50%).
Fitur Revenue
digunakan sebagai target feature atau label kelas.
- Dari total 12.330 sesi, 84,5% atau 10.422 sesi merupakan kelas negatif yang tidak diakhiri dengan pembelian, sedangkan 15,5% sisanya atau 1.908 sesi merupakan kelas positif yang diakhiri dengan pembelian.
- Dataset imbalance atau tidak seimbang, karena proporsi data minoritas (dalam hal ini kelas positif) relatif rendah, dengan degree of imbalance: moderate.
- Pada saat data pre-processing, kita perlu melakukan handling imbalance data, seperti
- Oversampling: menduplikasi data minoritas,
- Undersampling: menghapus data mayoritas, atau
- Class weight.
Univariate analysis dilakukan untuk melihat distribusi data dari setiap fitur secara terpisah. Bisa melihat distribusi data apakah berdistribusi normal, left skew, atau right skew dengan menggunakan kdeplot. Kemudian melihat ada berapa banyak outlier yang ada pada setiap fitur dengan menggunakan boxplot.
Dari distribusi data dapat disimpulkan bahwa:
- Sebagian besar fitur memiliki distribusi yang positively skewed, karena nilai mean > median.
- Sebagian besar fitur memiliki outlier atau pencilan.
- Fitur
OperatingSystem
distribusinya multimodal, karena nilai mode > 2. - Fitur
Month
distribusinya mendekati bimodal dengan data tertinggi pada bulan Mei dan November. - Fitur
VisitorType
dengan nilai Returning_Visitor sangat mendominasi. - Fitur
Weekend
dengan nilai False mendominasi. - Fitur
Revenue
dengan nilai False (tidak melakukan purchasing) sangat mendominasi. - Fitur
Browser
danTrafficType
memiliki kategori yang cukup banyak (terdapat > 10 kategori)
Pada saat data pre-processing, kita perlu:
- Menghapus outlier pada setiap fitur bisa menggunakan IQR atau Z-Score.
- Melakukan Feature Transformation dengan Log Transformation, karena terdapat banyak fitur yang memiliki sebaran right skew.
- Melakukan Feature Encoding untuk fitur
Month
,Weekend
, danRevenue
menggunakan Label Encoding, sedangkan untuk fiturVisitorType
menggunakan One Hot Encoding, karena terdapat > 2 kategori dan bukan tipe ordinal. - Melakukan Handling Imbalanced Data untuk fitur
Revenue
, karena fitur ini merupakan target yang mempunyai ketimpangan data yang signifikan.
Untuk melakukan multivariate analysis bisa menggunakan pairplot. Pairplot digunakan untuk menganalisis antara dua variabel pada data (bivariate analysis). Pada bagian scatterplot dapat dilihat sebaran data dari dua variabel yang dipilih. Parameter hue bisa ditambahkan untuk mempertegas sebaran scatterplot setiap fitur terhadap target. Hasil observai didapatkan, antara lain:
- Hampir tidak ada scatterplot dengan warna yang terpisah dengan baik.
- Fitur dengan pemisahan warna yang kurang baik bisa berpengaruh terhadap tingkat akurasi model.
- Scatterplot dengan sebaran warna yang terpisah mengindikasikan bahwa dataset memiliki kombinasi fitur yang baik.
- Satu-satunya kolom yang cukup baik untuk dijadikan fitur adalah
PageValues
yang menunjukkan pemisahan warna secara jelas.
Dari korelasi data dapat disimpulkan bahwa:
- Dari scatterplot bisa dilihat perbedaan sebaran warna yang cukup mencolok, hal ini menunjukkan bahwa
PageValues
denganRevenue
memiliki korelasi yang cukup baik. - Untuk memperjelas pola hubungan
PageValues
denganRevenue
bisa digunakan pointplot, tingginya nilaiPageValues
berbanding lurus dengan naiknya nilaiRevenue
, sehingga fiturPageValues
harus dipertahankan. - Fitur
PageValues
danRevenue
memiliki pola hubungan positive linear association yang membentuk pola garis lurus berdasarkan Pearson Correlation. - Untuk mencari korelasi data secara mudah juga bisa menggunakan correlation heatmap, fitur
PageValues
danRevenue
berkorelasi sedang (0,49), karena ketika tidak ada pembelian yang dilakukan, jumlah sesi dengan Page Values = 0 relatif tinggi, yaitu sebanyak 9.230 sesi. - Fitur
BounceRates
danExitRates
berkorelasi tinggi (0,91), karena ketika Bounce Rate meningkat, Exit Rate juga meningkat berdasarkan hasil perhitungan oleh Google Analytics, sehingga kita bisa memilih salah satu fitur, yaitu yang memiliki correlation lebih besar(ExitRates
) atau bisa juga melakukan Principal Component Analysis (PCA). - Korelasi antara durasi atau waktu yang dihabiskan pelanggan di halaman tertentu terhadap jumlah halamannya terlihat cukup jelas, sehingga untuk menghasilkan
Revenue
, maka harus memiliki Bounce Rates yang rendah, Exit Rates yang rendah, dan Page Values yang tinggi.
Tahap Pengerjaan
- Pada saat dilakukan handle missing values didapatkan jumlah nilai pada dataset adalah 0, sehingga dapat disimpulkan dataset ini bersih karena tidak memiliki nilai kosong
- Pada saat dilakukan Handle ducpliated data didapatkan jumlah duplikat 757 baris yang sebelumnya hanya 125 baris. Hal ini disebabkan sesudah dilakukan drop beberapa fitur
- Sebelum melakukan handle outliers, kita melakukan splitting menjadi train dan test set yang kemudian kita hanya melakukan handle outliers pada data train dan selanjutnya dilakukan evaluasi performa model pada data test.
- Kita menggunakan metode Z-Score untuk menghapus data outlier ekstrem pada X_train set.
- Pada saat dilakukan handle outliers pada data train didapatkan X-train memiliki jumlah baris sebelum dilakukan filter outlier sebanyak 9.864 baris, sedangkan sesudah dilakukan filter outlier dihasilkan 8.377 baris.
- Kita menggunakan Logarithmic Transformation untuk mengubah fitur numerikal terdistribusi menceng ke kanan menjadi terdistribusi lebih normal.
Feature | Skewness |
---|---|
Administrative |
1.485398 |
Administrative_Duration |
2.398119 |
Informational |
2.727807 |
Informational_Duration |
4.828783 |
ProductRelated |
1.981740 |
ProductRelated_Duration |
2.018775 |
BounceRates |
3.087599 |
ExitRates |
1.787320 |
PageValues |
3.203185 |
Weekend |
1.246781 |
- Dari tabel di atas dapat dilihat bahwa semua fitur numerikal memiliki skewness yang tinggi (nilai absolut dari skewness > 1), sehingga perlu di-log transformasi.
- Kita menggunakan fungsi np.log untuk melakukan log transformasi pada variabel, dan menambahkan 1 untuk menghindari pembagian dengan nol. Setelah transformasi selesai, kita dapat memeriksa skewness kembali untuk memastikan bahwa nilai skewness sudah berkurang.
Feature | Skewness |
---|---|
Administrative |
0.528311 |
Administrative_Duration |
0.233996 |
Informational |
2.110203 |
Informational_Duration |
2.168179 |
ProductRelated |
0.090613 |
ProductRelated_Duration |
0.897208 |
BounceRates |
2.964477 |
ExitRates |
1.690123 |
PageValues |
1.919541 |
Weekend |
1.246781 |
- Setelah itu, kami menggunakan Min Max Scaler untuk menormalisasi data numerikal dalam rentang 0–1.
Feature | count | mean | std | min | 25% | 50% | 5% | max |
---|---|---|---|---|---|---|---|---|
Administrative |
8377.0 | 0.292301 | 0.315649 | 0.0 | 0.000000 | 0.270238 | 0.540476 | 1.0 |
Administrative_Duration |
8377.0 | 0.343896 | 0.353708 | 0.0 | 0.000000 | 0.303012 | 0.687338 | 1.0 |
Informational |
8377.0 | 0.110753 | 0.250974 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 1.0 |
Informational_Duration |
8377.0 | 0.104560 | 0.250072 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 1.0 |
ProductRelated |
8377.0 | 0.569338 | 0.187310 | 0.0 | 0.430840 | 0.577356 | 0.708042 | 1.0 |
ProductRelated_Duration |
8377.0 | 0.699615 | 0.159284 | 0.0 | 0.607905 | 0.723116 | 0.814775 | 1.0 |
BounceRates |
8377.0 | 0.075369 | 0.137139 | 0.0 | 0.000000 | 0.007575 | 0.092018 | 1.0 |
ExitRates |
8377.0 | 0.198254 | 0.168897 | 0.0 | 0.082879 | 0.145081 | 0.255714 | 1.0 |
PageValues |
8377.0 | 0.127191 | 0.277474 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 1.0 |
Kita akan melakukan feature encoding terhadap fitur VisitorType
.
- Terdapat 18 Fitur sebelum encoding dan jumlah fitur sesudah encoding sebanyak 13 Fitur.
- Setelah Encoding kita mengeluarkan beberapa fitur seperti
SpecialDay
,Month
,OperatingSystem
,Browser
,Region
,TrafficType
dan untukVisitorType
kita mengubah menjadi 3 fitur yaituVisitorType_New_Visitor
dan `VisitorType_Returning_Visitor'. - Berikut adalah fitur terbaru setelah Encoding :
Administrative
,Administrative_Duration
,Informational
,Informational_Duration
,ProductRelated
,ProductRelated_Duration
,BounceRates
,ExitRates
,PageValues
,Weekend
,VisitorType_New_Visitor
,VisitorType_Other
,VisitorType_Returning_Visitor
Kami menggunakan metode Random Over-Sampling untuk handle fitur target yang tidak seimbang dengan menambahkan jumlah sample pada minority class sehingga setara dengan majority class
- Dari proses pengerjaan yang kami lakukan, kami menemukan bahwa jumlah pelanggan yang melakukan transaksi hanya 1159 dibanding yang tidak melakukan transaksi 7218.
- Setelah melakukan proses handling terhadap imbalance class, data yang melakukan transaksi dan tidak masing-masing berjumlah 8350
Dari hasil feature selection menggunakan metode Chi-Square, menampilkan 10 fitur yang memiliki score tertinggi, yaitu:
- PageValues memiliki score paling dominan, yaitu 463,2.
- VisitorType_New_Visitor dan VisitorType_Returning_Visitor dapat memprediksi, karena tipe pelanggan dapat memengaruhi Purchase Rate.
- Administrative_Duration dan Informational_Duration dapat memprediksi, karena ketika makin lama durasi atau waktu yang dihabiskan pada suatu halaman, maka makin besar kemungkinan terjadi Purchase Rate.
- ExitRates dan BounceRates dapat memprediksi pelanggan itu melakukan purchase atau tidak, karena ketika ExitRates atau BounceRates yang rendah akan terjadi Purchase Rate yang tinggi.
- Administrative, Informational, dan ProductRelated dapat memprediksi, karena ketika makin banyak jumlah halaman yang dikunjungi, maka makin besar kemungkinan terjadi Purchase Rate.
Selain itu, kami juga mencoba menggunakan metode Extra Trees Classifier dan metode F-Classif yang menghasilkan nilai relatif mirip dengan metode Chi-Square. namun ketika kami menggunakan metode ANOVA F-value-based Feature Selection (AF), hasil yang dihasilkan berbeda dari metode lainnya, di mana nilai yang tertinggi dimiliki oleh fitur VisitorType_Returning_Visitor, bukan PageValues.
Lalu, dari hasil beberapa metode feature selection tersebut kami mengambil ... feature, yaitu ...
Kami melakukan PCA (Principal Component Analysis) dengan tujuan mereduksi dimensi dengan membentuk feature baru dengan menggabungkan feature-feature yang sudah ada.
TotalPage_view
sebuah featur baru yang berisi informasi total halaman yang dilihat customer selama mengunjungi web.TotalPage_time
sebuah featur baru yang berisi informasi total waktu yang dihabiskan customer dalam mengunjungi web.
Untuk mempermudah ML dalam memprediksi, kami mencoba untuk menggali informasi data yang nantinya akan dibuat feature baru.
ProductView_Percent
merupakan feature yang berisi informasi persentase customer dalam melihat produk yang sejenis.ProductTime_Percent
merupakan feature yang berisi informasi persentase customer dalam menghabiskan waktu untuk melihat produk yang sejenis.Average_ProductTime
merupakan feature yang berisi informasi rata-rata waktu yang dihabiskan customer dalam melihat produk sejenis.PageValues_x_BounceRates
merupakan feature yang berisi informasi keterkaitan antara PageValues dan BounceRate, dimana jika nilainya semakin besar maka semakin baik sebuah halaman tersebut.PageValues_per_ProductView
merupakan feature yang berisi informasi rasio antara nilai halaman dan jumlah halaman produk sejenis, jika semakin tinggi nilainya maka bisa dikatakan halaman produk sejenis itu cenderung menciptakan transaksi.PageValues_per_ProductTime
merupakan feature yang berisi informasi rasio antara nilai halaman dan waktu yang dihabiskan untuk melihat produk sejenis, jika semakin tinggi nilainya maka customer tertarik pada produk yang ditawarkan dan cenderung melakukan transaksi setelah menghabiskan di halaman produk yang cukup lama.
-
Di daerah
Region
1 memiliki jumlah pengunjung situs web e-commerce yang terbanyak. Solusi untuk meningkatkan ketertarikan pengunjung, kita bisa melakukan promosi ke daerah-daerah yang jarang mengunjungi situs web dengan memberikan penawaran spesial, seperti gratis ongkos pengiriman (ongkir). -
Pengunjung yang berkunjung pada weekend lebih sedikit dibandingkan dengan hari-hari biasa atau weekday, sehingga kita bisa mengadakan event untuk menarik pelanggan melakukan transaksi pada waktu weekend.
-
Bagi Returning Visitor atau pelanggan yang sering berkunjung ke situs web dan melakukan transaksi, solusi yang dapat kita berikan yaitu memberikan kupon gratis belanja yang dapat digunakan pada transaksi berikutnya.
-
Bagi New Visitor atau pelanggan baru, agar melakukan transaksi pertama, solusi kita, bisa diberikan produk gratis dengan syarat melakukan pembelanjaan sejumlah tertentu.
-
Pada fitur
Month
, diketahui bahwa bulan Maret, Mei, November, dan Desember merupakan bulan-bulan yang sering dikunjungi pengunjung, Solusi kita, coba untuk mengadakan suatu event di setiap bulan seperti event (yang dilakukan kompetitor) 1.1 hingga 12.12. -
Pada bulan Februari jumlah pelanggan yang mengunjungi situs web sangat sedikit dan terlihat dari revenue yang dihasilkan juga sedikit. Solusi kita, diberikan promo di hari Valentine untuk menarik minat pelanggan melakukan transaksi.
The source code for the site is licensed under the MIT license, which you can find here.
Sakar, C. O. & Kasto, Y. (2018). UCI Machine Learning Repository. University of California, Irvine, School of Information and Computer Sciences. https://archive.ics.uci.edu/ml/datasets/Online+Shoppers+Purchasing+Intention+Dataset
Sakar, C. O., Polat, S. O., Katircioglu, M., & Kasto, Y. (2019). Real-time prediction of online shoppers' purchasing intention using multilayer perceptron and LSTM recurrent neural networks. Neural Computing and Applications, 31(11), 6893-6908. https://doi.org/10.1007/s00521-018-3523-0