Close Menu
    Trending
    • STOP Building Useless ML Projects – What Actually Works
    • Credit Risk Scoring for BNPL Customers at Bati Bank | by Sumeya sirmula | Jul, 2025
    • The New Career Crisis: AI Is Breaking the Entry-Level Path for Gen Z
    • Musk’s X appoints ‘king of virality’ in bid to boost growth
    • Why Entrepreneurs Should Stop Obsessing Over Growth
    • Implementing IBCS rules in Power BI
    • What comes next for AI copyright lawsuits?
    • Why PDF Extraction Still Feels LikeHack
    AIBS News
    • Home
    • Artificial Intelligence
    • Machine Learning
    • AI Technology
    • Data Science
    • More
      • Technology
      • Business
    AIBS News
    Home»Machine Learning»Data Science in Telco: Data Cleansing (Part 1) | by Sefza Auma Tiang Alam | May, 2025
    Machine Learning

    Data Science in Telco: Data Cleansing (Part 1) | by Sefza Auma Tiang Alam | May, 2025

    Team_AIBS NewsBy Team_AIBS NewsMay 15, 2025No Comments9 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    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 Knowledge Scientist diminta untuk mempersiapkan information sekaligus membuat mannequin prediksi yang tepat untuk menentukan pelanggan akan berhenti berlangganan (churn) atau tidak.

    Kita akan melakukan Knowledge Preprocessing (Knowledge 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 information.

    1. Pandas

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

    • 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 information 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 information
    • 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
    • change() digunakan untuk mengganti nilai

    2. Matplotlib

    Matplotlib adalah library Python yang fokus pada visualisasi information seperti membuat plot grafik. Matplotlib dapat digunakan dalam skrip Python, Python dan IPython shell, server aplikasi internet, dan beberapa toolkit graphical consumer 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 Knowledge 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)
    • Associate 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 system safety or not (Sure, No, No web service)
    • TechSupport Whether or not the shopper has tech assist 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 films 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 fee methodology (Digital verify, Mailed verify, Financial institution switch (automated), Bank card (automated))
    • MonthlyCharges The quantity charged to the shopper month-to-month
    • TotalCharges The whole 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 information 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 information 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 information

    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 information

    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 information 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 information yang kita ambil sudah benar. Berdasarkan hasil tersebut, terdapat perbedaan jumlah nomor ID dari information pertama kali di load sampai dengan hasil akhir. Jumlah row information 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 information

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

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

    print('Complete lacking values information 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 Knowledge setelah dihapus information Lacking Values adalah',df_load.form)
    Output:
    Complete lacking values information dari kolom Churn 43
    Complete Rows dan kolom Knowledge setelah dihapus information Lacking Values adalah (6950, 22)

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

    • Tenure pihak information 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 information 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 information 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 information, 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 information tersebut menggunakan boxplot. Boxplot merupakan ringkasan distribusi sampel yang disajikan secara grafis yang bisa menggambarkan bentuk distribusi information (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 information 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 information 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 information 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 information. Perbedaan istilah menjadi salah satu faktor yang sering terjadi, untuk itu dibutuhkan standardisasi dari information yang sudah ter-input.

    Gunakan fungsi value_counts() untuk melihat jumlah information 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 change() untuk menstandardkan nilai.

    df_load = df_load.change(['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.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleCognichip out of Stealth with $33M in Funding for Artificial Chip Intelligence
    Next Article Google’s AlphaEvolve Is Evolving New Algorithms — And It Could Be a Game Changer
    Team_AIBS News
    • Website

    Related Posts

    Machine Learning

    Credit Risk Scoring for BNPL Customers at Bati Bank | by Sumeya sirmula | Jul, 2025

    July 1, 2025
    Machine Learning

    Why PDF Extraction Still Feels LikeHack

    July 1, 2025
    Machine Learning

    🚗 Predicting Car Purchase Amounts with Neural Networks in Keras (with Code & Dataset) | by Smruti Ranjan Nayak | Jul, 2025

    July 1, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    STOP Building Useless ML Projects – What Actually Works

    July 1, 2025

    I Tried Buying a Car Through Amazon: Here Are the Pros, Cons

    December 10, 2024

    Amazon and eBay to pay ‘fair share’ for e-waste recycling

    December 10, 2024

    Artificial Intelligence Concerns & Predictions For 2025

    December 10, 2024

    Barbara Corcoran: Entrepreneurs Must ‘Embrace Change’

    December 10, 2024
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    Most Popular

    Yum! Brands Brings AI to Drive-Thrus With Nvidia Partnership

    March 19, 2025

    《從零開始的資料科學筆記》Day#9: 特徵工程. 🙋什麼是特徵? | by Ethan Chen | Jun, 2025

    June 23, 2025

    When You Think You’re a Genius… Until You Realize You’re Not! 🤯 | by Ahmed Abdulwahid | Jan, 2025

    January 22, 2025
    Our Picks

    STOP Building Useless ML Projects – What Actually Works

    July 1, 2025

    Credit Risk Scoring for BNPL Customers at Bati Bank | by Sumeya sirmula | Jul, 2025

    July 1, 2025

    The New Career Crisis: AI Is Breaking the Entry-Level Path for Gen Z

    July 1, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2024 Aibsnews.comAll Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.