• About Us
  • Privacy Policy
  • Disclaimer
  • Contact Us
TechTrendFeed
  • Home
  • Tech News
  • Cybersecurity
  • Software
  • Gaming
  • Machine Learning
  • Smart Home & IoT
No Result
View All Result
  • Home
  • Tech News
  • Cybersecurity
  • Software
  • Gaming
  • Machine Learning
  • Smart Home & IoT
No Result
View All Result
TechTrendFeed
No Result
View All Result

Information Science in Telco: Information Cleaning (Half 1) | by Sefza Auma Tiang Alam | Could, 2025

Admin by Admin
May 16, 2025
Home Machine Learning
Share on FacebookShare on Twitter


Sefza Auma Tiang Alam

Analisis dan Prediksi Potensi Buyer Churn

DQLab Telco merupakan perusahaan Telco yang sudah mempunyai banyak cabang. DQLab Telco sudah mempunyai banyak pelanggan yang beralih langganan ke kompetitor. Pihak administration ingin mengurangi jumlah pelanggan yang beralih (churn) dengan menggunakan machine studying.

Tim Information Scientist diminta untuk mempersiapkan knowledge sekaligus membuat mannequin prediksi yang tepat untuk menentukan pelanggan akan berhenti berlangganan (churn) atau tidak.

Kita akan melakukan Information Preprocessing (Information Cleaning) bulan lalu, langkah yang akan dilakukan adalah:

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

Beberapa package deal yang membantu kita dalam melakukan analisis knowledge.

  1. Pandas

Pandas (Python for Information Evaluation) adalah library Python yang fokus untuk proses analisis knowledge seperti manipulasi knowledge, persiapan knowledge, dan pembersihan knowledge.

  • read_csv() digunakan untuk membaca file csv
  • str.match() digunakan untuk mencocokan dengan karakter tertentu
  • drop() digunakan untuk menghapus
  • rely() digunakan untuk menghitung masing-masing variable
  • drop_duplicates() digunakan untuk menghapus knowledge duplicate rows
  • fillna() digunakan untuk mengisi dengan nilai tertentu
  • quantile() digunakan untuk melihat quantile ke tertentu
  • masks() mengganti nilai tertentu jika kondisi memenuhi
  • astype() mengubah tipe knowledge
  • value_counts() digunakan untuk menghitung unik dari kolom
  • sort_values() digunakan untuk type values
  • isnull() digunakan untuk mendeteksi lacking values
  • dropna() digunakan untuk menghapus lacking values
  • exchange() digunakan untuk mengganti nilai

2. Matplotlib

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

  • determine() digunakan untuk membuat determine 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 field plot

Untuk dataset yang digunakan yaitu

df_load = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv')

Untuk element datanya adalah sebagai berikut:

  • UpdatedAt Periode of Information taken
  • customerID Buyer ID
  • gender Whether or not the shopper is a male or a feminine (Male, Feminine)
  • SeniorCitizen Whether or not the shopper is a senior citizen or not (1, 0)
  • Accomplice Whether or not the shopper has a associate or not (Sure, No)
  • Dependents Whether or not the shopper has dependents or not (Sure, No)
  • tenure Variety of months the shopper has stayed with the corporate
  • PhoneService Whether or not the shopper has a cellphone service or not (Sure, No)
  • MultipleLines Whether or not the shopper has a number of traces or not (Sure, No, No cellphone service)
  • InternetService Buyer’s web service supplier (DSL, Fiber optic, No)
  • OnlineSecurity Whether or not the shopper has on-line safety or not (Sure, No, No web service)
  • OnlineBackup Whether or not the shopper has on-line backup or not (Sure, No, No web service)
  • DeviceProtection Whether or not the shopper has gadget safety or not (Sure, No, No web service)
  • TechSupport Whether or not the shopper has tech help or not (Sure, No, No web service)
  • StreamingTV Whether or not the shopper has streaming TV or not (Sure, No, No web service)
  • StreamingMovies Whether or not the shopper has streaming motion pictures or not (Sure, No, No web service)
  • Contract The contract time period of the shopper (Month-to-month, One yr, Two yr)
  • PaperlessBilling Whether or not the shopper has paperless billing or not (Sure, No)
  • PaymentMethod The shopper’s cost methodology (Digital test, Mailed test, Financial institution switch (automated), Bank card (automated))
  • MonthlyCharges The quantity charged to the shopper month-to-month
  • TotalCharges The overall quantity charged to the shopper
  • Churn Whether or not the shopper churned or not (Sure or No)

Hal pertama yang akan kita lakukan adalah melakukan import library dan dataset ke dalam workspace kita.

Setelah dataset di-import ke dalam workspace, tampilkan jumlah kolom dan baris dari knowledge set dengan menggunakan .form dan print 5 baris teratas dengan menggunakan head() dan carilah ada berapa jumlah customerID yang bersifat distinctive dengan menggunakan .nunique

#import library
import pandas as pd
pd.choices.show.max_columns = 50

#import dataset
df_load = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv')

#Tampilkan jumlah baris dan kolom
print(df_load.form)

#Tampilkan 5 knowledge teratas
print(df_load.head(5))

#Jumlah ID yang unik
print(df_load.customerID.nunique())

Notes:

1. pd.choices.show.max_columns = 50 digunakan untuk mempermudah penampilan row knowledge

2. Simpan dataset ke dalam variabel df_load

Mencari format ID Quantity (Telephone Quantity) Pelanggan customerID yang benar, dengan kriteria:

  • Panjang karakter adalah 11–12.
  • Terdiri dari angka Saja, tidak diperbolehkan ada karakter selain angka
  • Diawali dengan angka 45 2 digit pertama.

Gunakan fungsi rely() untuk menghitung banyaknya rows Buyer ID, anda juga bisa menggunakan str.match() & regex untuk mencocokan dengan kriteria diatas. Jangan lupa gunakan astype() untuk merubah tipe datanya yang semula numeric

Notes : Buat kolom bantuan baru dengan nama `valid_id`

df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45d{9,10})')
df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
print('Hasil jumlah ID Buyer yang terfilter adalah', df_load['customerID'].rely())
Output:
Hasil jumlah ID Buyer yang terfilter adalah 7006

Memastikan bahwa tidak ada Id Quantity pelanggan yang duplikat. Biasanya duplikasi ID quantity ini tipenya:

  • Duplikasi dikarenakan inserting melebihi satu kali dengan nilai yang sama tiap kolomnya
  • Duplikasi dikarenakan inserting beda periode pengambilan knowledge

Gunakan hasil dari pengolahan di tahap sebelumnya df_load untuk diolah di tahap ini. Gunakan fungsi drop_duplicates() untuk menghapus duplikasi rows, dan gunakan sort_values() untuk mengecek pengambilan knowledge terakhir.

# Drop Duplicate Rows
df_load.drop_duplicates()
# Drop duplicate ID sorted by Periode
df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
print('Hasil jumlah ID Buyer yang sudah dihilangkan duplikasinya (distinct) adalah',df_load['customerID'].rely())
Output:
Hasil jumlah ID Buyer yang sudah dihilangkan duplikasinya (distinct) adalah 6993

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

Selanjutnya kita akan menghapus rows dari data-data yang tidak terdeteksi apakah dia churn atau tidak. Diasumsikan knowledge modeller hanya mau menerima knowledge yang benar ada flag churn-nya atau tidak.

Gunakan isnull() digunakan untuk mendeteksi lacking values dan dropna() untuk menghapus knowledge yang lacking values.

print('Complete lacking values knowledge dari kolom Churn',df_load['Churn'].isnull().sum())
# Dropping all Rows with spesific column (churn)
df_load.dropna(subset=['Churn'],inplace=True)
print('Complete Rows dan kolom Information setelah dihapus knowledge Lacking Values adalah',df_load.form)
Output:
Complete lacking values knowledge dari kolom Churn 43
Complete Rows dan kolom Information setelah dihapus knowledge Lacking Values adalah (6950, 22)

Selain dengan menghapus rows dari knowledge, menangani lacking values bisa menggunakan nilai tertentu. Diasumsikan knowledge modeller meminta pengisian lacking values dengan kriteria berikut:

  • Tenure pihak knowledge modeller meminta setiap rows yang memiliki lacking values untuk lama berlangganan di isi dengan 11.
  • Variable yang bersifat numeric selain Tenure di isi dengan median dari masing-masing variable tersebut.

Tentukan:

  • Apakah masih ada knowledge yang lacking values
  • Jumlah lacking values dari masing-masing variable
  • Tangani lacking values-nya
df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
df_load.dropna(subset=['Churn'],inplace=True)

print('Standing Lacking Values :',df_load.isnull().values.any())
print('nJumlah Lacking Values masing-masing kolom, adalah:')
print(df_load.isnull().sum().sort_values(ascending=False))

# dealing with lacking values Tenure fill with 11
df_load['tenure'].fillna(11, inplace=True)

# Dealing with lacking values num vars (besides Tenure)
for col_name in record(['MonthlyCharges','TotalCharges']):
median = df_load[col_name].median()
df_load[col_name].fillna(median, inplace=True)

print('nJumlah Lacking Values setelah di imputer datanya, adalah:')
print(df_load.isnull().sum().sort_values(ascending=False))

Jumlah Lacking Values Earlier than
Jumlah Lacking Values Then

Setelah kita analisis lebih lanjut, ternyata masih ada lacking values dari knowledge yang kita sudah validkan Id Quantity pelanggannya. Lacking 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 lacking values lagi pada knowledge, terbukti dari jumlah lacking values masing-masing variable yang bernilai 0. Selanjutnya kita akan melakukan penanganan pencilan (outlier)

Mendeteksi pencilan dari suatu nilai (outlier) salah satunya bisa melihat plot dari knowledge tersebut menggunakan boxplot. Boxplot merupakan ringkasan distribusi sampel yang disajikan secara grafis yang bisa menggambarkan bentuk distribusi knowledge (skewness), ukuran tendensi sentral dan ukuran penyebaran (keragaman). Berikut adalah tampilan umum dari boxplot dalam merepresentasikan outliers.

Penggunaan fungsi describe() pada kolom tenure, MonthlyCharges, dan TotalCharges ditunjukkan sebagai berikut.

Melalui fungsi describe() ini kita hanya memperoleh statistik deskriptif ketiga kolom ini. Agar outlier pada ketiga kolom ini dapat dideteksi maka kamu diminta untuk memvisualisasikannya menggunakan boxplot-nya. Setiap satu boxplot ada di satu canvas determine.

import pandas as pd
df_load = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/dqlab_telco.csv')

df_load['valid_id'] = df_load['customerID'].astype(str).str.match(r'(45d{9,10})')
df_load = (df_load[df_load['valid_id'] == True]).drop('valid_id', axis = 1)
df_load.drop_duplicates()
df_load = df_load.sort_values('UpdatedAt', ascending=False).drop_duplicates('customerID')
df_load.dropna(subset=['Churn'],inplace=True)

df_load['tenure'].fillna(11, inplace=True)
for col_name in record(['MonthlyCharges','TotalCharges']):
median = df_load[col_name].median()
df_load[col_name].fillna(median, inplace=True)

print('nPersebaran knowledge sebelum ditangani Outlier: ')
print(df_load[['tenure','MonthlyCharges','TotalCharges']].describe())

# Creating Field Plot
import matplotlib.pyplot as plt
import seaborn as sns

# Masukkan variable
plt.determine() # untuk membuat determine baru
sns.boxplot(x=df_load['tenure'])
plt.present()
plt.determine() # untuk membuat determine baru
sns.boxplot(x=df_load['MonthlyCharges'])
plt.present()
plt.determine() # untuk membuat determine baru
sns.boxplot(x=df_load['TotalCharges'])
plt.present()

Grafik 1
Grafik 2
Grafik 3

Setelah kita mengetahui variable mana saja yang terdapat pencilan (outlier), selanjutnya kita akan atasi outlier dengan menggunakan metode interquartile vary (IQR). Untuk element jelasnya, bisa dilihat di ilustrasi di bawah ini:

Gunakan hasil dari pengolahan di tahap sebelumnya df_load untuk di olah di tahap ini. Gunakan fungsi quantile() untuk melihat quantile tertentu, dan gunakan masks() untuk me-replace nilai. Tentukan:

  • Nilai minimal dan most knowledge di tolerir
  • Ubah nilai yang di luar vary minimal & most ke dalam nilai minimal dan most
# Dealing with with IQR
Q1 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.25)
Q3 = (df_load[['tenure','MonthlyCharges','TotalCharges']]).quantile(0.75)

IQR = Q3 - Q1
most = Q3 + (1.5*IQR)
print('Nilai Most dari masing-masing Variable adalah: ')
print(most)
minimal = Q1 - (1.5*IQR)
print('nNilai Minimal dari masing-masing Variable adalah: ')
print(minimal)

more_than = (df_load > most)
lower_than = (df_load < minimal)
df_load = df_load.masks(more_than, most, axis=1)
df_load = df_load.masks(lower_than, minimal, axis=1)

print('nPersebaran knowledge setelah ditangani Outlier: ')
print(df_load[['tenure','MonthlyCharges','TotalCharges']].describe())

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 most & minimal dari interquartile vary (IQR). Setelah di tangani outlier-nya, dan dilihat perseberan datanya, terlihat sudah tidak ada lagi nilai yang outlier.

Mendeteksi apakah ada nilai-nilai dari variable kategorik yang tidak commonplace. Hal ini biasanya terjadi dikarenakan kesalahan enter knowledge. Perbedaan istilah menjadi salah satu faktor yang sering terjadi, untuk itu dibutuhkan standardisasi dari knowledge yang sudah ter-input.

Gunakan fungsi value_counts() untuk melihat jumlah knowledge distinctive per variable-nya.

#Loop
# Masukkan variable
for col_name in record(['gender','SeniorCitizen','Partner','Dependents','PhoneService','MultipleLines','InternetService','OnlineSecurity','OnlineBackup','DeviceProtection','TechSupport','StreamingTV','StreamingMovies','Contract','PaperlessBilling','PaymentMethod','Churn']):
print('nUnique Values Depend 33[1m' + 'Before Standardized 33[0m Variable',col_name)
print(df_load[col_name].value_counts())
Sebagian Output

Setelah kita mengeteahui variable mana saja yang ada nilai tidak commonplace, maka kita standardkan dengan pola terbanyak nya, dengan syarat tanpa mengubah maknanya. Contoh : Iya -> Sure Kemudian liat kembali distinctive values dari masing-masing variable yang sudah di ubah. Gunakan fungsi exchange() untuk menstandardkan nilai.

df_load = df_load.exchange(['Wanita','Laki-Laki','Churn','Iya'],['Female','Male','Yes','Yes'])

# Masukkan variable
for col_name in record(['gender','Dependents','Churn']):
print('nUnique Values Depend 33[1m' + 'After Standardized 33[0mVariable',col_name)
print(df_load[col_name].value_counts())

Sebagian Output

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

  • Gender (Feminine, Male, Wanita, Laki-Laki), yang bisa di standardkan nilainya menjadi (Feminine, Male) karena mempunyai makna yang sama.
  • Dependents (Sure, No, Iya), yang bisa di standardkan nilainya menjadi (Sure, No) karena mempunyai makna yang sama.
  • Churn (Sure, No, Churn), yang bisa di standardkan nilainya menjadi (Sure, No) karena mempunyai makna yang sama.

Setelah kita standardkan nilainya, dan kita amati kembali bentuk datanya, sudah terstandar dengan baik untuk distinctive value-nya.

Tags: AlamAumaCleansingDataPartScienceSefzaTelcoTiang
Admin

Admin

Next Post
Netflix’s Gears Of Conflict Film Eyes John Wick Co-Director

Netflix's Gears Of Conflict Film Eyes John Wick Co-Director

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Trending.

Discover Vibrant Spring 2025 Kitchen Decor Colours and Equipment – Chefio

Discover Vibrant Spring 2025 Kitchen Decor Colours and Equipment – Chefio

May 17, 2025
Reconeyez Launches New Web site | SDM Journal

Reconeyez Launches New Web site | SDM Journal

May 15, 2025
Safety Amplified: Audio’s Affect Speaks Volumes About Preventive Safety

Safety Amplified: Audio’s Affect Speaks Volumes About Preventive Safety

May 18, 2025
Flip Your Toilet Right into a Good Oasis

Flip Your Toilet Right into a Good Oasis

May 15, 2025
Apollo joins the Works With House Assistant Program

Apollo joins the Works With House Assistant Program

May 17, 2025

TechTrendFeed

Welcome to TechTrendFeed, your go-to source for the latest news and insights from the world of technology. Our mission is to bring you the most relevant and up-to-date information on everything tech-related, from machine learning and artificial intelligence to cybersecurity, gaming, and the exciting world of smart home technology and IoT.

Categories

  • Cybersecurity
  • Gaming
  • Machine Learning
  • Smart Home & IoT
  • Software
  • Tech News

Recent News

Report: AI coding productiveness positive aspects cancelled out by different friction factors that sluggish builders down

Report: AI coding productiveness positive aspects cancelled out by different friction factors that sluggish builders down

July 10, 2025
How authorities cyber cuts will have an effect on you and your enterprise

How authorities cyber cuts will have an effect on you and your enterprise

July 9, 2025
  • About Us
  • Privacy Policy
  • Disclaimer
  • Contact Us

© 2025 https://techtrendfeed.com/ - All Rights Reserved

No Result
View All Result
  • Home
  • Tech News
  • Cybersecurity
  • Software
  • Gaming
  • Machine Learning
  • Smart Home & IoT

© 2025 https://techtrendfeed.com/ - All Rights Reserved