Objektif dari project ini adalah:
Data Wrangling
Data Manipulation
Data yang digunakan adalah data komunitas berbasis platform digital, dimana setiap member bisa perpartisipasi dalam aktivitas terkait produk klien yang bekerja sama dengan pengelola komunitas.
TRUE [1] "id_komunitas" "id" "gender" "province"
TRUE [5] "district" "work" "work_2" "income"
TRUE [9] "post" "profile_view" "socmed_follower" "verify_status"
TRUE [13] "education" "interest_1" "interest_2" "interest_3"
TRUE [17] "interest_4" "interest_5" "points_rating" "pos_artikel"
TRUE [21] "headline_1" "headline_2" "comment" "verifikasi_1"
TRUE [25] "page_visit" "verifikasi_2" "total_reward" "birthday"
TRUE [29] "usia"
Berikut adalah deskripsi dari variabel pada dataset di atas yang memerlukan penjelasan lebih lanjut.
id_komunitas : Kode jenis komunitas yang diikuti oleh para member
post : jumlah post yang mereka hasilkan pada platform komunitas
profile_view: jumlah halaman profil mereka dilihat oleh pengunjung
socmed_follower: jumlah follower
verify_status: level akun profil membership
points_rating: tingkat penyelesaian tugas
pos_artikel: jumlah publikasi/pemberitaan
headline_1: jumlah review produk yang member lakukan di media konvensional
headline_2: jumlah review produk yang member lakukan di media digital
comment : partisipasi member melalui komentar
page_visit partisipasi member melalui kunjungan laman produk
total_reward: jumlah kumulasi reward
Untuk awalan dilakukan pembersihan data kolom ‘id’ dari karakter yang tidak dibutuhkan, misalnya dari id": "629ce151df66a75ecf2ada92 menjadi 629ce151df66a75ecf2ada92). Manipulasi data ini menggunakan ‘str_extract()’ dari library(stringr) dengan referensi: The pattern [a-f0-9]{24}.
Referensi: matches exactly 24 hexadecimal characters (commonly used for IDs like MongoDB ObjectIDs).
Selanjutnya akan dilakukan penyesuaian tipe kolom sesuai dengan konteks datanya.
TRUE Rows: 83,565
TRUE Columns: 29
TRUE $ id_komunitas <fct> 401, 401, 401, 401, 401, 2141, 2141, 2141, 2141, 2141,…
TRUE $ id <chr> "629ce151df66a75ecf2ada92", "62e8d6af08a8b53043675264"…
TRUE $ gender <fct> 0, male, NA, male, NA, male, 0, NA, NA, NA, NA, female…
TRUE $ province <fct> 0, DKI Jakarta, NA, Banten, NA, Jawa Tengah, 0, NA, NA…
TRUE $ district <fct> 0, Grogol Petamburan, NA, Kosambi, NA, Ungaran Barat, …
TRUE $ work <fct> 0, Programmer, NA, Ahli Gizi, NA, Desainer, 0, NA, NA,…
TRUE $ work_2 <fct> NA, Programmer, NA, Ahli Gizi, NA, Photographer/Conten…
TRUE $ income <fct> 0, Rp. 6 Juta - Rp.10 Juta, NA, Belum Berpenghasilan, …
TRUE $ post <int> 0, 1, NA, 1, NA, 13, 0, NA, NA, NA, NA, 176, NA, NA, 3…
TRUE $ profile_view <dbl> 0, 404, NA, 0, NA, 23402, 0, NA, NA, NA, NA, 100587, N…
TRUE $ socmed_follower <dbl> 0, 4000, NA, 0, NA, 0, 0, NA, NA, NA, NA, 50000, NA, N…
TRUE $ verify_status <fct> unverified, verified, NA, verified, NA, verified, unve…
TRUE $ education <fct> 0, s1, NA, sd, NA, other, 0, NA, NA, NA, NA, s2, NA, N…
TRUE $ interest_1 <fct> NA, Digital, NA, Agrikultur, NA, Arsitektur, NA, NA, N…
TRUE $ interest_2 <fct> NA, Kuliner, NA, Bisnis, NA, Buku, NA, NA, NA, NA, NA,…
TRUE $ interest_3 <fct> NA, Olahraga, NA, Ekonomi, NA, Gaya Hidup, NA, NA, NA,…
TRUE $ interest_4 <fct> NA, Teknologi, NA, Finansial, NA, Sejarah, NA, NA, NA,…
TRUE $ interest_5 <fct> NA, Wisata, NA, Games, NA, Seni & Budaya, NA, NA, NA, …
TRUE $ points_rating <int> 0, 5, NA, 0, NA, 105, 0, NA, NA, NA, NA, 2689, NA, NA,…
TRUE $ pos_artikel <dbl> 0, 5, NA, 5, NA, 65, 0, NA, NA, NA, NA, 880, NA, NA, 1…
TRUE $ headline_1 <dbl> 0, 0, NA, 0, NA, 40, 0, NA, NA, NA, NA, 220, NA, NA, 0…
TRUE $ headline_2 <dbl> 0, 0, NA, 0, NA, 4, 0, NA, NA, NA, NA, 22, NA, NA, 0, …
TRUE $ comment <dbl> 0, 0, NA, 0, NA, 15, 0, NA, NA, NA, NA, 747, NA, NA, 4…
TRUE $ verifikasi_1 <fct> 0, 0, NA, 0, NA, 0, 0, NA, NA, NA, NA, 100, NA, NA, 0,…
TRUE $ page_visit <int> 0, 2, NA, 0, NA, 117, 0, NA, NA, NA, NA, 502, NA, NA, …
TRUE $ verifikasi_2 <fct> 0, 50, NA, 0, NA, 50, 0, NA, NA, NA, NA, 50, NA, NA, 5…
TRUE $ total_reward <dbl> 50.000, 112.020, NA, 55.000, NA, 492.010, 50.000, NA, …
TRUE $ birthday <date> NA, 1999-08-04, NA, 1990-05-13, NA, 1988-07-21, NA, N…
TRUE $ usia <dbl> NA, 26, NA, 35, NA, 37, NA, NA, NA, NA, NA, 44, NA, NA…
Pada data komunitas ditemukan banyak nilai 0. Untuk selanjutnya nilai 0 akan diganti dengan NA untuk mempermudah analisis karena diasumsikan memiliki pengertian yang sama, yakni data tidak ada/tidak tersedia.
Setelah data rapi, selanjutnya untuk data-data bertipe numerik akan dilihat apakah data yang ada saat ini memiliki outlier atau tidak sehingga nantinya dapat dilakukan penanganan dari data outlier tersebut.
Berdasarkan boxplot di atas terlihat bahwa seluruh variabel memiliki outlier sehingga perlu dilakukan penanganan.
Metode yang digunakan berdasarkan nilai IQR, dimana nilai batas atas akan digunakan sebagai acuan untuk menangani nilai outlier yang ada. Khusus untuk variabel usia, nilai negatif juga akan dihilangkan.
Penanganan outlier akan menggunakan 2 metode:
Membuang semua baris yang dianggap sebagai outlier (melewati batas atas).
Mengganti semua nilai yang dianggap sebagai outlier (melewati batas atas) dengan NA.
Dari boxplot data hasil pada masing-masing metode penanganan outlier terlihat jumlah outlier sudah berkurang walaupun masih ada karena membentuk data baru.
TRUE komunitas komunitas_numerik komunitas_deletion komunitas_NA
TRUE 83565 83565 64420 83565
Dari penanganan data di atas terlihat bahwa untuk data komunitas dengan outlier dihapus, jumlah data yang tersisa masih cukup banyak. Dengan demikian secara kuantitas data, penanganan outlier dengan dihapus masih layak untuk digunakan.
Namun demikian, kedua metode juga perlu dilihat secara kualitas data yang dihasilkan. Kualitas data akan dilihat dengan cara membandingkan distribusi data menggunakan histogram, yakni untuk melihat sebaran data pada kedua metode penanganan outlier.
Pada distribusi data dengan penanganan oulier dihapus, terlihat ada beberapa variabel yang datanya hilang sebagai akibat penghapusan baris pada variabel yang lain. Hal ini menyebabkan distribusi data menjadi salah karena datanya menjadi sangat kecil atau hilang sama sekali. Hal ini terjadi pada variabel comment, headline_1, headline_2, page_visit, dan post.
Jika dibandingkan data dengan penanganan oulier dihapus, distribusi data dengan penanganan outlier diganti NA memberikan hasil yang lebih baik. Dengan tidak ada data yang dibuang, distribusi data baru masih mengikuti distribusi data awal. Berdasarkan hal ini, diambil kesimpulan bahwa data yang akan digunakan untuk proses selanjutnya adalah data baru dengan outlier diganti NA (komunitas_NA).
Setelah data outlier ditangani, hal berikutnya yang menjadi perhatian adalahnya adanya Missing Value (NA).
TRUE headline_1 headline_2 page_visit comment profile_view
TRUE 98.1 98.1 90.0 88.0 81.1
TRUE socmed_follower points_rating pos_artikel post usia
TRUE 79.9 77.5 65.5 65.4 46.2
TRUE total_reward
TRUE 10.7
Data komunitas yang ada saat ini memiliki Missing Value dengan jumlah yang bervariasi pada setiap kolomnya, terbesar bisa mencapai 98%.
Metode penanganan Missing Value sangat beragam, di antaranya:
Deletion: Menghapus baris atau kolom yang memiliki missing value.
Imputation:
Simple Imputation: Mengganti/mengisi Missing Value dengan Mean, Median, Modus, atau angka konstan, tergantung dengan kondisi dari set data.
Advanced Imputation: Mengganti/mengisi Missing Value dengan angka yang didapatkan dengan Regresi, KNN, Multiple, Forward/Backward.
Selanjutnya akan dicoba beberapa metode untuk diimplementasikan pada data komunitas.
TRUE komunitas_NA komunitas_NA_deletion
TRUE 83565 0
Dari informasi jumlah baris terlihat bahwa jumlah baris dihilangkan pada jumlah yang sangat besar.
Selanjutnya akan dicoba Simple Imputation yang diisi dengan Mean/Median, atau angka konstan. Metode ini hanya bisa dilakukan untuk kolom dengan tipe data numerik.
Mean kalau data dianggap memiliki distribusi yang relatif normal, minim outlier.
Median kalau data dianggap memiliki distribusi yang tidak normal, banyak outlier.
Perhitungan Median akan menggunakan na.rm = TRUE, yakni: fungsi untuk mengabaikan (atau menghapus) nilai yang hilang (Missing Value, atau sering disebut NA - Not Available) saat melakukan perhitungan atau operasi tertentu.
Berdasarkan histogram untuk masing-masing imputasi dengan Mean dan Median terlihat bahwa distribusi menjadi sangat tidak beraturan dan tebal pada sebuah kelompok nilai tertentu. Hal ini sangat berpotensi menghasilkan bias terhadap analisis ke depannya. Karena itu selanjutnya akan dicoba untuk menggunakan metode Advanced Imputation dengan alternatif MICE dan KNN.
Setelah membaca literatur, KNN dinilai kurang tepat digunakan untuk kasus kali ini. Hal ini dikarenakan Missing Value yang ada sangat ekstrem, mencapai 98%. Sementara menurut bacaan, KNN baik digunakan untuk jumlah Missing Value yang moderat, yakni sekitar 30%. Selain itu untuk ukuran dataset yang besar, KNN bisa berjalan sangat lama.
Referensi: https://medium.com/@tarangds/knn-imputation-the-complete-guide-146f932870a7
TRUE headline_1 headline_2 page_visit comment profile_view
TRUE 98.1 98.1 90.0 88.0 81.1
TRUE socmed_follower points_rating pos_artikel post usia
TRUE 79.9 77.5 65.5 65.4 46.2
TRUE total_reward
TRUE 10.7
Alteratif berikutnya adalah imputasi dengan metode Multiple Imputation by Chained Equations (MICE).
Berdasarkan artikel penelitian di Population Health Metrics, yang bertujuan untuk melihat jumlah proprosi Missing Value yang paling tepat untuk penggunaan MICE, disimpulkan bahwa MICE cukup baik digunakan bahkan sampai 70% Missing Value.
“High robustness up to 50% missing values, with marginal deviations from complete datasets. Caution is warranted for missing proportions between 50 and 70%, as moderate alterations are observed. Proportions beyond 70% lead to significant variance shrinkage and compromised data reliability, emphasizing the importance of acknowledging imputation limitations for practical decision-making”.
Referensi:
https://pophealthmetrics.biomedcentral.com/articles/10.1186/s12963-025-00364-2
https://www.rdocumentation.org/packages/mice/versions/3.14.0/topics/mice
https://www.appsilon.com/post/imputation-in-r
Imputasi MICE kali ini akan menggunakan metode Predictive Mean Matching (PMM)
TRUE post profile_view socmed_follower points_rating headline_2
TRUE 0 0 0 0 0
TRUE comment page_visit total_reward usia
TRUE 0 0 0 0
Distribusi data hasil penanganan Missing Value menggunakan metode pmm cukup baik karena terlihat masih menyerupai data aslinya dimana tidak ada kelompok nilai yang menonjol.
Selain data numerik, data kategorikal juga akan diberikan penanganan Missing Value dengan imputasi menggunakan Multiple Imputation by Chained Equations (MICE) namun dengan metode Logreg dan Polyreg.
Referensi:
https://www.sciencedirect.com/science/article/pii/S2352914823002289
TRUE [1] "gender" "province" "work_2" "income"
TRUE [5] "verify_status" "education" "interest_1" "interest_2"
TRUE [9] "interest_3" "interest_4" "interest_5"
Data hasil imputasi numerik dan kategorik akan disatukan pada dataset yang sama. Data juga dicek kembali apakah seluruh Missing Value sudah berhasil diimputasi. Dari data di bawah terlihat seluruh kolom sudah tidak memiliki Missing Value (NA).
TRUE id_komunitas id post profile_view
TRUE 2182 : 6497 Length:83565 Min. : 1.000 Min. : 1.0
TRUE 2145 : 4719 Class :character 1st Qu.: 1.000 1st Qu.: 9.0
TRUE 2540 : 3621 Mode :character Median : 1.000 Median : 24.0
TRUE 2177 : 3279 Mean : 1.675 Mean : 37.7
TRUE 2187 : 3241 3rd Qu.: 2.000 3rd Qu.: 57.0
TRUE 2518 : 3131 Max. :10.000 Max. :135.0
TRUE (Other):59077
TRUE socmed_follower points_rating headline_2 comment
TRUE Min. : 50.0 Min. : 1.000 Min. : 1.000 Min. : 1.000
TRUE 1st Qu.: 200.0 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.000
TRUE Median : 500.0 Median : 3.000 Median : 2.000 Median : 3.000
TRUE Mean : 822.9 Mean : 8.509 Mean : 4.464 Mean : 5.065
TRUE 3rd Qu.:1000.0 3rd Qu.:12.000 3rd Qu.: 6.000 3rd Qu.: 7.000
TRUE Max. :2000.0 Max. :38.000 Max. :23.000 Max. :28.000
TRUE
TRUE page_visit total_reward usia gender
TRUE Min. : 1.000 Min. : 50.00 Min. :11.00 female:44657
TRUE 1st Qu.: 2.000 1st Qu.: 50.00 1st Qu.:21.00 male :38908
TRUE Median : 5.000 Median : 50.00 Median :23.00
TRUE Mean : 8.209 Mean : 75.78 Mean :24.14
TRUE 3rd Qu.:13.000 3rd Qu.:105.34 3rd Qu.:26.00
TRUE Max. :29.000 Max. :192.58 Max. :39.00
TRUE
TRUE province work_2 income
TRUE DKI Jakarta: 7740 Guru : 7464 > Rp.20 Juta : 2441
TRUE Jawa Barat :14234 Lainnya : 8986 Belum Berpenghasilan :52570
TRUE Jawa Tengah:12077 Mahasiswa:35456 Rp. 1 Juta - Rp.2 :16205
TRUE Jawa Timur :15930 Other :31659 Rp. 10 Juta - Rp.20 Juta: 2324
TRUE Other :33584 Rp. 2 : 6499
TRUE Rp. 6 Juta - Rp.10 Juta : 3526
TRUE
TRUE verify_status education interest_1 interest_2
TRUE unverified:40373 s1 :41651 Agrikultur : 5249 Bisnis : 5580
TRUE verified :42837 sma :28203 Anak dan Keluarga:11293 Buku : 8111
TRUE Other : 355 Other:13711 Bahasa :10926 Digital: 6050
TRUE Bisnis :11588 Ekonomi: 5187
TRUE Buku : 7834 Other :58637
TRUE Other :36675
TRUE
TRUE interest_3 interest_4 interest_5
TRUE Pendidikan: 6300 Pendidikan: 8246 Pendidikan: 6414
TRUE Other :77265 Other :75319 Sosial : 9383
TRUE Teknologi : 8657
TRUE Other :59111
TRUE
TRUE
TRUE
Data ini akan digunakan untuk analisis lanjutan yang dilakukan di tahap berikutnya.
(Berlanjut ke bagian analisis)