Pembukaan

Ilustrasi Rekrutmen Kerja

Berkembangnya teknologi internet akhir-akhir ini merupakan sebuah belati bermata dua di kehidupan modern ini, terutama di dunia perekrutan kerja yang belakangan ini semakin intensif dalam menggunakan layanan internet untuk mengiklankan peluang kerja di institusi mereka. Disini semakin marak iklan peluang kerja yang berhaluan palsu atau penipuan bertebaran di dunia maya, yang mana telah banyak korban yang termakan oleh iklan palsu rekrutmen kerja ini.

Proyek ini berusaha untuk membuat suatu model pembelajaran mesin (Machine Learning) yang sekiranya mampu memisahkan iklan kerja yang asli (real) dengan iklan kerja yang (palsu). Dataset kali ini dapat diunduh di tautan Kaggle berikut. Dataset memiliki observasi sebanyak 17880 dan terdapat 17 jenis variabel dengan fraudulent sebagai variabel patokan (target). Dataset juga terdiri atas 17014 data yang dilabel sebagai asli (real). dan 866 data yang dilabel sebagai palsu (fraud).

Atribut variabel yang dimiliki oleh dataset awal dijabarkan sebagai berikut:

  • job_id : Penomoran entri iklan
  • title : Posisi Pekerjaan yang diiklankan
  • location : Penempatan kerja
  • department : Divisi kerja atau departemen kerja
  • company_profile : Profil perusahaan
  • description : Deskripsi dari posisi pekerjaan yang ditawarkan
  • requirements : Persyaratan kerja di perusahaan yang bersangkitan
  • benefits : Tunjangan yang diberikan oleh perusahaan kala sudah diterima
  • employment_type : Jenis karyawan perusahaan (Full-Time, Half-Time, dan sebagainya)
  • required_experience : Syarat pengalaman minimal yang dibutuhkan oleh perusahaan
  • required_education : Syarat pendidikan minimal yang dibutuhkan oleh perusahaan
  • telecommuting : Apakah pekerjaan berupa kerja jarak jauh (‘1’ untuk iya dan ‘0’ untuk tidak)
  • has_company_logo : Apakah perusahaan memiliki logo (‘1’ untuk iya dan ‘0’ untuk tidak)
  • has_question : Apakah perusahaan memberikan pertanyaan kerja (‘1’ untuk iya dan ‘0’ untuk tidak)
  • industry : Jenis bidang yang digeluti perusahaan
  • function. : Jenis fungsi pekerjaan
  • fraudulent : Variabel target yang akan menjadi acuan dengan label yang sudah ditentukan secara manual sebelumnya

Namun setelah dilakukan bagan praproses pada dataset yang akan digunakan maka, variabel dari dataset berkembang menjadi:

(Jenis data numerik):

  • job_id : Penomoran entri iklan
  • count_prof : Menghitung jumlah kata yang ada di bagian narasi profil perusahaan (company_profile)
  • count_desc : Menghitung jumlah kata yang ada di bagian narasi deskripsi posisi kerja (description)
  • count_req : Menghitung jumlah kata yang ada di bagian narasi persyaratan kerja (requirements)
  • count_benf : Menghitung jumlah kata yang ada di bagian narasi tunjangan pekerjaan (benefits)

(Jenis data karakter):

  • title : Nama judul posisi Pekerjaan yang diiklankan
  • location : Penempatan kerja
  • department : Divisi kerja atau departemen kerja
  • company_profile : Narasi profil perusahaan
  • description : Narasi deskripsi dari posisi pekerjaan yang ditawarkan
  • requirements : Narasi persyaratan kerja di perusahaan yang bersangkutan
  • benefits : Narasi tunjangan yang diberikan oleh perusahaan kala sudah diterima
  • employment_type : Jenis karyawan perusahaan (Full-Time, Half-Time, dan sebagainya)
  • required_experience : Syarat pengalaman minimal yang dibutuhkan oleh perusahaan
  • required_education : Syarat pendidikan minimal yang dibutuhkan oleh perusahaan
  • industry : Jenis bidang yang digeluti perusahaan
  • function. : Jenis fungsi pekerjaan

(Jenis data faktor dan berupa biner [‘1’ untuk iya dan ‘0’ untuk tidak]):

  • telecommuting : Apakah pekerjaan berupa kerja jarak jauh atau kerja dari rumah
  • has_company_logo : Apakah perusahaan memiliki logo
  • has_questions : Apakah perusahaan memberikan pertanyaan screening kerja
  • addr_low_edu : Apakah perusahaan mensyaratkan minimal pendidikan rendah setara SMA
  • us_based : Apakah pekerjaan berbasis di Amerika Serikat
  • dollar_title : Apakah lowongan iklan mencantumkan lambang mata uang di nama judul posisi iklan lowongan
  • dollar_desc : Apakah lowongan iklan mencantumkan lambang mata uang di deskripsi pekerjaan iklan lowongan
  • html_desc : Apakah lowongan iklan mencantumkan tautan eksternal di deskripsi pekerjaan
  • email_link : Apakah dalam narasi iklan lowongan terdapat tautan email
  • html_req : Apakah lowongan iklan mencantumkan tautan eksternal di narasi persyaratan kerja pekerjaan
  • html_benf : Apakah lowongan iklan mencantumkan tautan eksternal di Narasi tunjangan pekerjaan
  • short_prof : Apakah narasi profil pekerjaan memiliki jumlah kata kurang dari 10 kata
  • not_long_prof : Apakah narasi profil pekerjaan memiliki jumlah kata melebihi 10 kata dan kurang dari 100 kata
  • short_desc : Apakah narasi deskripsi pekerjaan memiliki jumlah kata kurang dari 10 kata
  • short_req : Apakah narasi persyaratan pekerjaan memiliki jumlah kata kurang dari 10 kata
  • spam_wrd ; Apakah narasi teks memiliki kata-kata spam (spam word) seperti: ‘easy money’ dan sejenisnya
  • cons_punct : Apakah narasi iklan memiliki tanda baca berurut yang seakan memberikan kesan penekanan maksud
  • fraudulent : Variabel target yang akan menjadi acuan dengan label yang sudah ditentukan secara manual sebelumnya

Dimana variabel addr_low_edu, us_based, dollar_title, dollar_desc, html_desc, email_link, html_req, html_benf, short_prof, not_long_prof, short_desc, short_req, spam_wrd, cons_punct merupakan atribut tambahan yang akan digunakan untuk membuat model pemilahan iklan lowongan kerja berdasarkan dari hasil penelitian yang dilakukan oleh Kolias et al. [1]

Keseluruhan dataset ditunjukkan pada model tabel di bawah ini:

Eksplorasi Analisis Data

Pada bagian ini akan melihat bagaimana keadaan dataframe berdasarkan relasi target dengan variabel yang lain. Ke dalam dataset, mengingat bagaimana keadaan proporsi label yang sangat timpang antara label iklan asli dan label iklan palsu maka dataset akan dilakukan downsampling agar proporsi label dalam keadaan seimbang dengan menggunakan jumlah label oklan palsu (fraud) sebagai patokan. Penentuan atribut variabel dalam membentuk model pengklasifikasi Random Forest akan mengikuti penelitian yang telah dilakukan oleh Kolias et al. [1]

Pada kesempatan kali ini, eksplorasi analisis akan dilakukan dengan melihat persebaran tiap variabel terhadap variabel target.

  1. Telecommuting

Mengacu grafik di atas, disimpulkan bahwa absennya atribut telecommuting cukup berpengaruh dalam menentukan asli atau palsunya iklan lowongan dimana kebanyakan absennya label telecommuting didominasi oleh lowongan kerja asli.

  1. Logo Perusahaan

Gambar grafik di atas dapat menunjukkan bahwa terdapatnya logo perusahaan akan berpengaruh terhadap asli atau tidaknya suatu lowongan pekerjaan yang beredar di internet. Hal ini juga ditunjukkan dengan rendahnya tingkat iklan lowongan palsu yang memiliki logo perusahaan.

  1. Pertanyaan Rekrutmen

Data grafik menunjukkan bahwa Pertanyaan Screening memiliki turut andil dalam menentukan apakah suatu iklan pekerjaan itu asli atau tidak. Hal ini dapat diketahui dari proporsi jumlah iklan kerja palsu yang sangat sedikit yang mensertakan pertanyaan rekrutmen.

  1. Berpendidikan Rendah

Dari grafik dapat ditarik kesimpulan bahwa rata-rata iklan lowongan pekerjaan yang asli mensaratkan pendidikan tinggi sebagai salah satu persyaratannya.

  1. Berbasis di Amerika Serikat

Untuk kasus ini yang mana menggunakan dataset khusus dari tautan Kaggle, kebanyakan iklan lowongan pekerjaan yang asli memberikan penempatan kerja di Amerika Serikat dan hanya separuh dari iklan yang asli menawarkan penempatan kerja di luar Amerika Serikat.

  1. Lambang Dollar di Teks Iklan Kerja

Keberadaan lambang mata uang (Dollar / $) menjadi perhatian khusus untuk menentukan apakah iklan lowongan tergolong asli atau palsu. Hal ini dikarenakan berangkat dari hipotesis bahwa lowongan kerja palsu cendrung untuk menunjukkan gaji yang bombastis diikuti dengan lambang mata uang tertentu (dalam kasus ini Dollar).

  • Lambang Dollar di Judul Iklan

Dari data grafik, ditunjukkan bahwa lowongan kerja yang asli tidak akan mencantumkan lambang mata uang di judul lowongan mereka. Dan sangat sedikit pula yang mencantumkan lambang mata uang di judul lowongan pada jenis lowongan yang diindikasi palsu.

  • Lambang Dollar di Deskripsi Pekerjaan

Dari data grafik, tidak adanya keberadaan lambang mata uang di deskripsi pekerjaan menunjukkan bahwa iklan lowongan dimungkinkan tergolong sebagai iklan yang asli.

  1. Tautan eksternal di Teks Iklan Kerja Tautan eksternal biasanya dicantumkan untuk membawa calon pelamar ke tautan laman utama resmi dari perusahaan yang sedang menawarkan peluang posisi. Walaupun demikian, dapat juga disalahgunakan oleh pihak yang tidak bertanggung jawab ke laman palsu untuk mencuri identitas pelamar yang menjadi korban penipuan.
  • Tautan Eksternal di Deskripsi Pekerjaan

  • Tautan Eksternal di Syarat Pekerjaan

  • Tautan Eksternal di Fasilitas Pekerjaan

Terlihat dari ketiga grafik di atas, kebanyakan iklan lowongan asli jarang sekali untuk menautkan tautan eksternal pada iklan lowongan.

Hal ini mungkin agak sedikit bias dikarenakan rata-rata iklan lowongan kerja di sini diambil dari suatu situs pencarian kerja yang ada di Amerika Serikat yang mungkin memiliki kebiasaan untuk tidak menautkan tautan eksternal ke iklan lowongan. Hal ini akan berimplikasi berbeda di negara-negara lain pula.

  1. Tautan e-mail di Teks Iklan Kerja

  2. Jumlah Kata dalam Iklan Penghitungan jumlah kata dalam iklan cukup menentukan terhadap keabsahan suatu iklan pekerjaan, dimana biasanya iklan yang cendrung palsu tidak akan menerangkan panjang lebar mengenai profil perusahaan, deskripsi kerja, dan hal-hal yang bersangkut paut dengan syarat kebutuhan tenaga kerja yang akan direkrut. Hipotesis yang diajukan adalah: semakin sedikit kata (short_prof atau short_desc atau short_req == 1) yang terdeteksi maka kecendrungan untuk dikategorikan sebagai iklan palsu semakin meningkat juga.

Dan sebagai pembanding, jumlah kata yang tertera di profil perusahaan juga dihitung apakah jumlah kata berada pada rentang 10 hingga 100 jumlah kata atau tidak (not_long_prof). Dimana ini menunjukkan bahwa iklan ditulis oleh perusahaan asli yang memeiliki narasi profil perusahaan yang cukup panjang.

  • Jumlah Kata di bawah 10 (jumlah kata < 10) di Profil Pekerjaan

  • Jumlah Kata di atas 10 dan di bawah 100 (10 > jumlah kata < 100) di Profil Pekerjaan

  • Jumlah Kata di bawah 10 (jumlah kata < 10) di Deskripsi Perkerjaan

  • Jumlah Kata di bawah 10 (jumlah kata < 10) di Syarat Kerja

Dibuktikan dari keseluruhan gambar grafik di atas, bahwasanya jumlah kata dalam teks narasi iklan kerja juga turut berpengaruh pada bagaimana keabsahan suatu iklan lowongan kerja. Dimana dapat disimpulkan rata-rata iklan lowongan asli memiliki narasi profil perusahaan, deskripsi pekerjaan, dan deskripsi syarat kerja yang cukup panjang melebihi 10 kata.

  1. Spam word

Berdasarkan grafik, dalam menentukan apakah lowongan iklan itu cenderung palsu atau tidak ialah cukup ditentukan dengan keberadaan spam word dalam kalimat narasi iklan lowongan. Dimana berdasarkan grafik, untuk lowongan iklan yang asli (real) kecendrungannya adalah tidak memiliki kata-kata spam word seperti: “easy money”, “be your own boss”, “work from home” dan sejenisnya. Sedang untuk jenis lowongan iklan yang palsu (fraud) memiliki kecendrungan untuk menampilkan spam word tersebut walaupun hanya segelintir saja yang melakukannya, hal ini juga dapat diamati melalui grafik di atas.

  1. Tanda Baca Berulang (Consecutive Punctuation)

Maksud dari tanda baca berulang (consecutive punctuation) di sini adalah kecendrungan lowongan kerja memiliki imbuhan atau tanda baca yang mengesankan sedang menegaskan suatu hal. Sebagai contoh adalah dalam kalimat “Buruan daftar dan Anda akan cepat menjadi kaya!!!” dan sejenisnya. Pada kalimat tersebut terdapat penekanan berupa tanda seru beruntun (!!!) yang dapat diindikasikan sebagai iklan lowongan palsu dengan menghipotesiskannya sebagai salah satu penanda keabsahan iklan lowongan.

Hal ini dapat dibuktikan melalui grafik, bahwa rata-rata lowongan yang asli tidak atau sangat langka dalam membubuhkan tanda baca penekanan berulang seperti yang telah diterangkan sebelum ini.

Pembuatan Model Pembelajaran Mesin (Machine Learning)

Setelah dilakukannya tahap pemrosesan dataset yang diperoleh sebelumnya dari tautan Kaggle dengan menghasilkan objek baru bernama df_fin, sesuai dengan tujuan awal kita maka pada tahap ini akan dilakukan pembentukan model pembelajaran mesin berdasarkan input variabel biner yang telah kita buat sebelumnya. Ke dalam tahap ini akan dilakukan:

  1. Pengecekkan muatan nilai NA di dalam dataframe dan pengeliminsiannya
  2. Pembagian data (Data Splitting)
  3. Pembuatan model pembelajaran mesin
  4. Pengujian hasil model

=========

  1. Pengecekkan muatan nilai NA di dalam dataframe dan pengeliminsiannya

Bagan ini akan menunjukkan proses penghilangan nilai NA yang dimungkinkan terdapat di dalam dataset. Pengubahan nilai NA juga bermaksud sebagai suatu usaha untuk “berjaga-jaga” agar pada saat pembuatan model tidak terjadi galat (error) di tengah proses. Pengeliminasian nilai NA akan difokuskan terutama di variabel biner sebagai variabel yang akan digunakan untuk pembuatan model pembelajaran mesin.

             job_id               title            location 
                  0                   0                 346 
         department     company_profile         description 
              11547                3308                   0 
       requirements            benefits     employment_type 
               2694                7206                3471 
required_experience  required_education            industry 
               7050                8105                4903 
              funct          count_prof          count_desc 
               6455                   0                   1 
          count_req          count_benf       telecommuting 
                  6                  22                   0 
   has_company_logo       has_questions        addr_low_edu 
                  0                   0                   0 
           us_based        dollar_title         dollar_desc 
                  0                   0                   0 
          html_desc          email_link            html_req 
                  0                   0                   0 
          html_benf          short_prof       not_long_prof 
                  0                   0                   0 
         short_desc           short_req            spam_wrd 
                  1                   6                   0 
         cons_punct          fraudulent 
                  0                   0 

Jika dilihat dari pemeriksaan awal, maka dapat dipastikan keberadaan NA terdapat di variabel short_desc dan short_req. Kepada kedua variabel ini maka akan dilakukan langkah pengeliminasian nilai NA dengan mengubahnya menjadi nilai ‘0’. Pengecekkan ulang terhadap isi dataset setelah dilakukan pengeliminasian nilai NA menunjukkan hasil berikut:

             job_id               title            location 
                  0                   0                 346 
         department     company_profile         description 
              11547                3308                   0 
       requirements            benefits     employment_type 
               2694                7206                3471 
required_experience  required_education            industry 
               7050                8105                4903 
              funct          count_prof          count_desc 
               6455                   0                   1 
          count_req          count_benf       telecommuting 
                  6                  22                   0 
   has_company_logo       has_questions        addr_low_edu 
                  0                   0                   0 
           us_based        dollar_title         dollar_desc 
                  0                   0                   0 
          html_desc          email_link            html_req 
                  0                   0                   0 
          html_benf          short_prof       not_long_prof 
                  0                   0                   0 
         short_desc           short_req            spam_wrd 
                  0                   0                   0 
         cons_punct          fraudulent 
                  0                   0 

Disini sudah dipastikan bahwa dataset raw sudah tidak mengandung NA kecuali di variabel-variabel non biner (yang tidak menjadi variabel pembentuk model pembelajaran mesin).

  1. Pembagian data (Data Splitting)

Sebelum melakukan pembagian data menjadi data latihan dan data pegujian, dari data awal akan diambil 6 data dengan label yang berimbang secara manual yang kemudian ditujukan menjadi data verifikasi. Tujuan dibentuk data sekecil ini untuk melihat kemampuan model dalam memberikan dan mengukur kemampuan dalam mereproduksi prediksi.

Selanjutnya pada bagan ini akan melakukan pembagian dataset dengan rasio pemisahan 80:20, dengan 80% dataset menjadi data latihan model (training) dan 20% sisanya menjadi data pengujian (testing).

Adapun di bagian pembagian dataset ini, akan dilakukan upaya downsampling mengingat terjadi ketimpangan atara data iklan yang terlabel asli (real) dengan data iklan yang terlabel palsu (fraud). Sebelumnya, dilakukan pengecekkan terhadap proporsi variabel target data dengan melakukan berikut:


    0     1 
13611   689 

Terlihat bahwasanya terjadi ketimpangan yang cukup besar, yang oleh karna itu akan dilakukan downsampling pada bagian yang terlabeli “0” atau terlabeli iklan asli (real).


  0   1 
689 689 

Setelah dilakukannya downsampling, tampak bahwa kedua label sudah proporsional dalam jumlah.

  1. Pembuatan model pembelajaran mesin

Bagan pembuatan model dilakukan dalam 2 tahap: pembentukan k-fold Cross Validation dan pembuatan model Random Forest.

Pembentukan k-fold Cross Validation dapat dilakukan sebagai berikut:

Dan pelaksanaan pembuatan model untk kedua dataset pelatihan (normal dan downsampling) akan dinyatakan dengan berikut:

Dipilihnya metode Random Forest untuk pembuatan model adalah berdasarkan hasil penelitian yang dibuat dengan tujuan yang sama dalam proyek ini. Dimana pada penelitian tersebut dengan memasukkan variabel-variabel yang telah ditentukan akan memeberikan hasil yang memuaskan dengan waktu pembentukan model yang sangat cepat. Hasil prediksi mencapai akurasi hingga 90,556% dengan kecepatan pembentukan model selama 0,45 detik di dalam penelitian tersebut. [1]

Untuk melakukan penghematan waktu, model pembelajaran mesin dapat disimpan dengan file .RDS dengan melakukan berikut

  1. Pengujian hasil model

Setelah kedua model dibuat maka selanjutnya adalah memeriksa hasil yang didapatkan dengan menggunakan dataset penguji (test samples) yang telah dipersiapkan sebelumnya kepada model pembelajaran mesin. Berikut merupakan penerapan model pada dataset pengujian:

Hasil yang di dapatkan kemudian dijikan melalui Confussion Matrix dan akan dilihat perbandingan antara dataset normal dengan yang telah di downsample.

Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 3371  126
         1   29   48
                                          
               Accuracy : 0.9566          
                 95% CI : (0.9494, 0.9631)
    No Information Rate : 0.9513          
    P-Value [Acc > NIR] : 0.07335         
                                          
                  Kappa : 0.3635          
                                          
 Mcnemar's Test P-Value : 1.249e-14       
                                          
            Sensitivity : 0.27586         
            Specificity : 0.99147         
         Pos Pred Value : 0.62338         
         Neg Pred Value : 0.96397         
             Prevalence : 0.04868         
         Detection Rate : 0.01343         
   Detection Prevalence : 0.02154         
      Balanced Accuracy : 0.63367         
                                          
       'Positive' Class : 1               
                                          
Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 2881   29
         1  519  145
                                          
               Accuracy : 0.8467          
                 95% CI : (0.8344, 0.8583)
    No Information Rate : 0.9513          
    P-Value [Acc > NIR] : 1               
                                          
                  Kappa : 0.2914          
                                          
 Mcnemar's Test P-Value : <2e-16          
                                          
            Sensitivity : 0.83333         
            Specificity : 0.84735         
         Pos Pred Value : 0.21837         
         Neg Pred Value : 0.99003         
             Prevalence : 0.04868         
         Detection Rate : 0.04057         
   Detection Prevalence : 0.18579         
      Balanced Accuracy : 0.84034         
                                          
       'Positive' Class : 1               
                                          

Hasil perbandingan Confussion Matrix di atas antara dataset yang telah di-downsampling dengan yang masih dalam proporsi asli, menunjukkan bahwa model yang dihasilkan dari dataset yang di-downsample walaupun memiliki tingkat akurasi yang rendah sebaliknya menunjukkan nilai recall (sensitivity) yang cukup tinggi. Dalam kasus ini, model dengan nilai recall yang tinggi sangat dibutuhkan mengingat maraknya penipuan (fraudulence) semakin marak akhir-akhir ini seiring dengan matangnya jagat dunia maya.

Untuk memastikan keajegan model yang telah dibuat, selanjutnya model akan dicoba untuk memprediksikan hasil dari data verifikasi. Dengan melakukan cara di bawah:

Confusion Matrix and Statistics

          Reference
Prediction 0 1
         0 2 0
         1 1 3
                                          
               Accuracy : 0.8333          
                 95% CI : (0.3588, 0.9958)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.1094          
                                          
                  Kappa : 0.6667          
                                          
 Mcnemar's Test P-Value : 1.0000          
                                          
            Sensitivity : 1.0000          
            Specificity : 0.6667          
         Pos Pred Value : 0.7500          
         Neg Pred Value : 1.0000          
             Prevalence : 0.5000          
         Detection Rate : 0.5000          
   Detection Prevalence : 0.6667          
      Balanced Accuracy : 0.8333          
                                          
       'Positive' Class : 1               
                                          

Terlihat dari Confussion Matrix di atas, hasil prediksi model mampu menerka cukup tepat dengan memberikan terkaan terhadap 3 data iklan palsu dengan tepat. Dengan ini dapat dikatakan bahwasanya model yang dibuat dengan menerapkan downsampling menghasilkan prediksi data yang mendekati tepat.

Kesimpulan

Di dapatkan dengan menerapkan metode Random Forest, pengklasifikasian terhadap label lowongan iklan menghasilkan hasil yang memuaskan dengan memberikan hampir 83% nilai recall dan model Random Forest sangat cocok untuk melakukan klasifikasi pada kondisi variabel yang tidak berpola.

Referensi

(1) S. Vidros, C. Kolias, G. Kambourakis, L. Akoglu, “Automatic Detection of Online Recruitment Frauds: Characteristics, Methods, and a Public Dataset”, Future Internet, March 2017