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,
- Mencari ID pelanggan (Nomor telepon) yang valid
- Mengatasi data-data yang masih kosong (Missing Values)
- Mengatasi Nilai-Nilai Pencilan (Outlier) dari setiap Variable
- 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
https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv'
3. Mencari Validitas ID Number Pelanggan
Memfilter ID Number Pelanggan Format Tertentu
Memfilter Duplikasi ID Number Pelanggan
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
Mengatasi Missing Value dengan Pengisian Nilai tertentu
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)
https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv
Mengatasi Outlier
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
Menstandarisasi Variabel Kategorik
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.