Data Science in Telco: Data Cleansing - nurkomarhidaya/DQLab GitHub Wiki

1. Introduction

Latar Belakang

DQLab Telco merupakan perusahaan Telco yang sudah mempunyai banyak cabang tersebar dimana-mana. Sejak berdiri pada tahun 2019, DQLab Telco konsisten untuk memperhatikan customer experience-nya sehingga tidak akan ditinggalkan pelanggan.

Walaupun baru berumur 1 tahun lebih sedikit, DQLab Telco sudah mempunyai banyak pelanggan yang beralih langganan ke kompetitor. Pihak management ingin mengurangi jumlah pelanggan yang beralih (churn) dengan menggunakan machine learning.

Oleh karena itu, tim Data Scientist diminta untuk mempersiapkan data sekaligus membuat model prediksi yang tepat untuk menentukan pelanggan akan berhenti berlangganan (churn) atau tidak

Tugas dan Langkah

Sebagai seorang data scientist, kamu diminta untuk menyiapkan data sebelum dilakukan permodelan.

Pada tugas kali ini, kamu akan melakukan Data Preprocessing (Data Cleansing) bulan lalu, yakni Juni 2020.

Langkah yang akan dilakukan adalah,

  1. Mencari ID pelanggan (Nomor telepon) yang valid
  2. Mengatasi data-data yang masih kosong (Missing Values)
  3. Mengatasi Nilai-Nilai Pencilan (Outlier) dari setiap Variable
  4. Menstandardisasi Nilai dari Variable

2. Library dan Data yang Digunakan

Library yang Digunakan

Pada analisis kali ini, akan digunakan beberapa package yang membantu kita dalam melakukan analisis data.

1. Pandas

Pandas (Python for Data Analysis) adalah library Python yang fokus untuk proses analisis data seperti manipulasi data, persiapan data, dan pembersihan data.

  • read_csv() digunakan untuk membaca file csv
  • str.match() digunakan untuk mencocokan dengan karakter tertentu
  • drop() digunakan untuk menghapus
  • count() digunakan untuk menghitung masing-masing variable
  • drop_duplicates() digunakan untuk menghapus data duplicate rows
  • fillna() digunakan untuk mengisi dengan nilai tertentu
  • quantile() digunakan untuk melihat quantile ke tertentu
  • mask() mengganti nilai tertentu jika kondisi memenuhi
  • astype() mengubah tipe data
  • value_counts() digunakan untuk menghitung unik dari kolom
  • sort_values() digunakan untuk sort values
  • isnull() digunakan untuk mendeteksi missing values
  • dropna() digunakan untuk menghapus missing values
  • replace() digunakan untuk mengganti nilai

2. Matplotlib

Matplotlib adalah library Python yang fokus pada visualisasi data seperti membuat plot grafik. Matplotlib dapat digunakan dalam skrip Python, Python dan IPython shell, server aplikasi web, dan beberapa toolkit graphical user interface (GUI) lainnya.

  • figure() digunakan untuk membuat figure gambar baru

3. Seaborn

Seaborn membangun di atas Matplotlib dan memperkenalkan tipe plot tambahan. Ini juga membuat plot Matplotlib tradisional Anda terlihat sedikit lebih cantik.

  • box_plot() digunakan untuk membuat box plot

Data yang Digunakan

Untuk dataset yang digunakan sudah disediakan dalam format csv, silahkan baca melalui fungsi pandas di python df_load = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv')

Untuk detail datanya adalah sebagai berikut:

  • _UpdatedAt _Periode of Data taken
  • _customerID _Customer ID
  • _gender _Whether the customer is a male or a female (Male, Female)
  • _SeniorCitizen _Whether the customer is a senior citizen or not (1, 0)
  • _Partner _Whether the customer has a partner or not (Yes, No)
  • _Dependents _Whether the customer has dependents or not (Yes, No)
  • _tenure _Number of months the customer has stayed with the company
  • _PhoneService _Whether the customer has a phone service or not (Yes, No)
  • _MultipleLines _Whether the customer has multiple lines or not (Yes, No, No phone service)
  • _InternetService _Customer’s internet service provider (DSL, Fiber optic, No)
  • _OnlineSecurity _Whether the customer has online security or not (Yes, No, No internet service)
  • _OnlineBackup _Whether the customer has online backup or not (Yes, No, No internet service)
  • _DeviceProtection _Whether the customer has device protection or not (Yes, No, No internet service)
  • _TechSupport _Whether the customer has tech support or not (Yes, No, No internet service)
  • _StreamingTV _Whether the customer has streaming TV or not (Yes, No, No internet service)
  • _StreamingMovies _Whether the customer has streaming movies or not (Yes, No, No internet service)
  • _Contract _The contract term of the customer (Month-to-month, One year, Two year)
  • _PaperlessBilling _Whether the customer has paperless billing or not (Yes, No)
  • _PaymentMethod _The customer’s payment method (Electronic check, Mailed check, Bank transfer (automatic), Credit card (automatic))
  • _MonthlyCharges _The amount charged to the customer monthly
  • _TotalCharges _The total amount charged to the customer
  • Churn Whether the customer churned or not (Yes or No)

Import Library dan Dataset

image image

https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv'

3. Mencari Validitas ID Number Pelanggan

Memfilter ID Number Pelanggan Format Tertentu

image image

Memfilter Duplikasi ID Number Pelanggan

image image

Kesimpulan

Validitas dari ID Number pelanggan sangat diperlukan untuk memastikan bahwa data yang kita ambil sudah benar. Berdasarkan hasil tersebut, terdapat perbedaan jumlah nomor ID dari data pertama kali di load sampai dengan hasil akhir. Jumlah row data ketika pertama kali di load ada sebanyak 7113 rows dan 22 columns dengan 7017 jumlah ID yang unique. Kemudian setelah di cek validitas dari ID pelanggan, maka tersisa 6993 rows data

4. Mengatasi Missing Values

Mengatasi Missing Value dengan Penghapusan Rows

image image

Mengatasi Missing Value dengan Pengisian Nilai tertentu

image image image

Kesimpulan

Setelah kita analisis lebih lanjut, ternyata masih ada missing values dari data yang kita sudah validkan Id Number pelanggannya. Missing values terdapat pada kolom Churn, tenure, MonthlyCharges & TotalCharges. Setelah kita tangani dengan cara penghapusan rows dan pengisian rows dengan nilai tertentu, terbukti sudah tidak ada missing values lagi pada data, terbukti dari jumlah missing values masing-masing variable yang bernilai 0. Selanjutnya kita akan melakukan penanganan pencilan (outlier)

5. Mengatasi Outlier

Mendeteksi adanya Outlier (Boxplot)

image image

image image image

https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv

Mengatasi Outlier

image image

Kesimpulan

Dari ketiga boxplot dengan variable 'tenure','MonthlyCharges' & 'TotalCharges' terlihat jelas bahwasannya ada outlier. Hal ini bisa di identifikasi dari adanya titik-titik yang berada jauh dari gambar boxplot-nya. Kemudian kalau kita liat persebaran datanya dari kolom max nya juga ada nilai yang sangat tinggi sekali.

Kemudian nilai outlier tersebut ditangani dengan cara merubah nilainya ke nilai maximum & minimum dari interquartile range (IQR). Setelah di tangani outlier-nya, dan dilihat perseberan datanya, terlihat sudah tidak ada lagi nilai yang outlier.

6. Menstandarisasi Nilai

Mengatasi Nilai yang tidak Standar

image image

Menstandarisasi Variabel Kategorik

image image

Kesimpulan

Ketika kita amati lebih jauh dari jumlah unique value dari masing-masing variable kategorik, terlihat jelas bahwa ada beberapa variable yang tidak standar. Variable itu adalah:

  • Gender (Female, Male, Wanita, Laki-Laki), yang bisa di standardkan nilainya menjadi (Female, Male) karena mempunyai makna yang sama.
  • Dependents (Yes, No, Iya), yang bisa di standardkan nilainya menjadi (Yes, No) karena mempunyai makna yang sama.
  • Churn (Yes, No, Churn), yang bisa di standardkan nilainya menjadi (Yes, No) karena mempunyai makna yang sama. Setelah kita standardkan nilainya, dan kita amati kembali bentuk datanya, sudah terstandar dengan baik untuk unique value-nya.

image