1 . Objektif & Impor Data

Objektif dari project ini adalah:

  1. Data Wrangling

  2. 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

2 . Data Wrangling

2.1 Penyesuaian Data

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.

2.2 Penanganan Outlier

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:

  1. Membuang semua baris yang dianggap sebagai outlier (melewati batas atas).

  2. 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).

2.3 Imputasi

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.

2.3.1 Metode Deletion & Simple Imputation

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.

2.3.2 Metode Multivariate Imputasi

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)