Lewati ke konten utama

Data Science dalam Pemasaran: Prediksi Customer Churn Rate

Pelajari cara menggunakan model machine learning Python untuk memprediksi customer churn rate, mengubah data pemasaran menjadi wawasan yang bermakna.
Diperbarui 31 Agu 2026  · 10 mnt baca

Jelajahi dengan AI

ChatGPTClaudePerplexity

 

Pendahuluan 

Dalam 10–15 tahun terakhir, seiring kemajuan teknologi digital, strategi pemasaran telah berubah secara signifikan. Merek-merek besar dan pasar yang lebih kecil telah mengumpulkan sejumlah besar data tentang transaksi, pembelian pelanggan, preferensi, daya beli, aktivitas belanja, demografi, ulasan, dan sebagainya. Semua data ini dapat membantu pemasar memahami perilaku pelanggan pada berbagai tahap, dari niat untuk membeli sesuatu, hingga pembelian nyata dan menjadi pelanggan tetap. Di sinilah potensi data science berperan.

Data science mengubah big data pemasaran menjadi wawasan yang dapat ditindaklanjuti, meskipun terkadang kurang intuitif pada pandangan pertama, misalnya beberapa pola perilaku konsumen yang tidak kentara dan ko-occurence. Hasilnya, pemasar dapat melihat gambaran yang lebih jelas tentang target audiens mereka, menarik pelanggan baru dan mempertahankan yang sudah ada, mengoptimalkan strategi pemasaran, meningkatkan visibilitas perusahaan, menciptakan kampanye iklan yang lebih sukses, melibatkan kanal baru, dan pada gilirannya secara signifikan memaksimalkan pendapatan perusahaan.

Salah satu use case data science yang paling umum dalam pemasaran adalah prediksi customer churn rate. Mari kita bahas topik ini lebih detail.

Use Case Data Science dalam Pemasaran: Prediksi Customer Churn Rate

Customer churn adalah kecenderungan pelanggan untuk membatalkan langganan atas suatu layanan yang mereka gunakan dan, karenanya, berhenti menjadi klien layanan tersebut. Customer churn rate adalah persentase pelanggan yang churn dalam interval waktu yang telah ditentukan. Ini adalah kebalikan dari laju pertumbuhan pelanggan yang melacak klien baru.

Customer churn rate merupakan indikator yang sangat penting untuk kepuasan pelanggan dan kesehatan bisnis perusahaan secara keseluruhan. Selain churn alami yang selalu terjadi dalam bisnis apa pun, atau churn musiman yang khas pada beberapa layanan, ada faktor-faktor lain yang bisa berarti ada sesuatu yang salah dalam perusahaan dan harus diperbaiki. Faktor-faktor tersebut adalah:

  • kurangnya dukungan pelanggan atau kualitasnya rendah,
  • pengalaman pelanggan yang negatif,
  • beralih ke pesaing dengan kondisi atau strategi harga yang lebih baik,
  • prioritas pelanggan berubah,
  • pelanggan lama tidak merasa puas,
  • layanan tidak memenuhi ekspektasi pelanggan,
  • masalah keuangan,
  • perlindungan penipuan pada pembayaran pelanggan.

Customer churn rate yang tinggi merupakan masalah serius bagi perusahaan karena alasan berikut:

  • Berkorelasi dengan hilangnya pendapatan perusahaan.
  • Biaya untuk mendapatkan pelanggan baru jauh lebih besar daripada mempertahankan yang sudah ada. Ini terutama berlaku untuk pasar yang sangat kompetitif.
  • Dalam kasus churn karena layanan pelanggan yang buruk, reputasi perusahaan dapat rusak parah karena ulasan negatif yang ditinggalkan mantan pelanggan yang tidak puas di media sosial atau situs ulasan.

Retensi pelanggan adalah komponen krusial dari strategi bisnis untuk semua layanan berbasis langganan. Untuk memprediksi customer churn rate dan mengambil langkah pencegahan yang sesuai, perlu mengumpulkan dan menganalisis informasi tentang perilaku pelanggan (interval pembelian, total periode menjadi klien, pembatalan, panggilan dan pesan tindak lanjut, aktivitas online) dan mencari tahu atribut serta kombinasinya yang menjadi ciri klien yang berisiko pergi. Mengetahui lebih awal pelanggan mana yang mungkin segera churn, terutama jika pelanggan tersebut berpendapatan tinggi atau sudah lama berlangganan, dapat membantu perusahaan untuk berfokus tepat pada mereka dan mengembangkan strategi yang efektif untuk mencoba meyakinkan mereka agar tetap tinggal. Pendekatan ini dapat mencakup menghubungi klien tersebut dengan penawaran khusus berupa hadiah, diskon, peningkatan langganan dengan harga yang sama, atau pengalaman yang dipersonalisasi lainnya.

Secara teknis, prediksi customer churn adalah masalah klasifikasi khas dalam machine learning ketika klien diberi label "ya" atau "tidak" dalam hal berisiko churn atau tidak. Mari kita telusuri use case ini di Python pada data dunia nyata.

Kita akan memodelkan churn dalam model bisnis telekomunikasi, di mana pelanggan dapat memiliki beberapa layanan dengan satu perusahaan telekomunikasi di bawah satu perjanjian induk. Dataset berisi fitur-fitur dari aktivitas pelanggan yang telah dibersihkan dan label churn yang menunjukkan apakah pelanggan mengalami churn atau tidak.

Mari kita lihat datanya dan jelajahi distribusi churn rate:

import pandas as pd

telcom = pd.read_csv('telco.csv')
print(f'Number of customers: {telcom.shape[0]:,}\n'
      f'Churn values: {set(telcom['Churn'])}\n\n'
      f'Churn distribution, %:\n{round(telcom.groupby(['Churn']).size()/telcom.shape[0]*100).convert_dtypes()}')
Number of customers: 7,032
Churn values: {0, 1}

Churn distribution, %:
Churn
0    73
1    27
dtype: float64

27% pelanggan mengalami churn, yang tergolong cukup tinggi. Namun dibandingkan use case data science sebelumnya, dataset ini tampaknya tidak memiliki masalah ketidakseimbangan kelas yang parah.

Sekarang, kita akan melakukan pra-pemrosesan data untuk kemudian menerapkan teknik machine learning guna melakukan prediksi churn. Ini mencakup membagi data menjadi set pelatihan dan pengujian serta mengekstrak variabel fitur dan target:

from sklearn.model_selection import train_test_split

target = ['Churn']
custid = ['customerID']

cols = [col for col in telcom.columns if col not in custid + target]

X = telcom[cols]
y = telcom[target]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

Algoritme pemodelan pertama yang akan kita gunakan untuk memprediksi label churn dan mengukur akurasi hasilnya adalah model klasifikasi regresi logistik sederhana:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

lr = LogisticRegression()
lr.fit(X_train, y_train)
predictions = lr.predict(X_test)
print(f'Test accuracy: {round(accuracy_score(y_test, predictions), 4)}')
Test accuracy: 0.8009

Berikutnya, mari tambahkan satu fungsionalitas lagi ke model regresi logistik kita, yaitu menjalankannya pada data yang diskalakan dengan regularisasi L1 untuk melakukan seleksi fitur bersamaan dengan pembangunan model. Nilai berbeda dari parameter C (yang merupakan kebalikan dari kekuatan regularisasi) memengaruhi akurasi model. Untuk saat ini, mari tetapkan nilai C sebesar 0,025:

lr = LogisticRegression(penalty='l1', C=0.025, solver='liblinear')
lr.fit(X_train, y_train)
predictions = lr.predict(X_test)
print(f'Test accuracy: {round(accuracy_score(y_test, predictions), 4)}')
Test accuracy: 0.7969

Sekarang, kita akan menyetel parameter C untuk regularisasi L1 guna menemukan nilai optimal yang mengurangi kompleksitas model sambil tetap mempertahankan metrik kinerja model yang baik. Untuk tujuan ini, kita akan melakukan iterasi melalui berbagai nilai C dan membangun instance regresi logistik pada masing-masing nilai tersebut, serta menghitung metrik kinerjanya.

Daftar C telah dibuat sebelumnya dengan kemungkinan nilai parameternya. Array l1_metrics telah dibuat dengan 3 kolom, dengan kolom pertama berisi nilai C, dan dua kolom berikutnya sebagai penampung jumlah koefisien non-nol dan skor akurasi model. Mari kita coba pendekatan ini:

 C  Non-Zero Coeffs  Accuracy
0  1.0000             23.0  0.801479
1  0.5000             22.0  0.799204
2  0.2500             21.0  0.802048
3  0.1000             20.0  0.802617
4  0.0500             18.0  0.802048
5  0.0250             13.0  0.796928
6  0.0100              5.0  0.790102
7  0.0050              3.0  0.783276
8  0.0025              2.0  0.745734

Kita dapat melihat bahwa nilai C yang lebih rendah mengurangi jumlah koefisien non-nol (yaitu fitur untuk pemodelan) sehingga menurunkan kompleksitas model, tetapi juga menurunkan akurasi model. Tampaknya nilai C sebesar 0,05 adalah yang optimal: ini mengurangi jumlah fitur menjadi 18 sambil memberikan skor akurasi sedikit lebih tinggi daripada model tanpa regularisasi.

Sekarang, mari coba algoritme pemodelan lain – model decision tree:

from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)
print(f'Test accuracy: {round(accuracy_score(y_test, predictions), 4)}')
Test accuracy: 0.7275

Untuk memilih model yang lebih presisi sambil menghindari overfitting, kita dapat mencoba menyetel kedalaman pohon (parameter max_depth) dan mengidentifikasi nilai optimalnya. Secara teknis, prosesnya sangat mirip dengan pemilihan parameter C optimal pada model regresi logistik di atas: di sini, kita akan melakukan iterasi pada beberapa nilai parameter max_depth, melatih decision tree untuk masing-masing nilai, lalu menghitung metrik kinerjanya.

Daftar depth_list telah dibuat sebelumnya dengan kemungkinan nilai parameternya. Array depth_tuning telah dibuat dengan 2 kolom, dengan kolom pertama diisi kandidat kedalaman, dan kolom lainnya sebagai penampung skor akurasi. Mari terapkan pendekatan ini dan temukan kedalaman pohon yang optimal:

depth_list = list(range(2, 15))
depth_tuning = np.zeros((len(depth_list), 2))
depth_tuning[:, 0] = depth_list

for index in range(len(depth_list)):
    clf = DecisionTreeClassifier(max_depth=depth_list[index])
    clf.fit(X_train, y_train)
    predictions = clf.predict(X_test)
    depth_tuning[index, 1] = accuracy_score(y_test, predictions)
   
col_names = ['Max_Depth', 'Accuracy']
print(pd.DataFrame(depth_tuning, columns=col_names))
 Max_Depth  Accuracy
0         2.0  0.756542
1         3.0  0.783276
2         4.0  0.782708
3         5.0  0.791809
4         6.0  0.778157
5         7.0  0.780432
6         8.0  0.757110
7         9.0  0.762230
8        10.0  0.763936
9        11.0  0.752560
10       12.0  0.745165
11       13.0  0.732651
12       14.0  0.727531

Dengan demikian, skor akurasi awalnya meningkat seiring kedalaman yang lebih besar kemudian mulai menurun. Pada max_depth sebesar 5, pohon menunjukkan skor akurasi tertinggi, sehingga kita dapat menganggap nilai ini sebagai kedalaman pohon yang optimal.

Setelah mengidentifikasi nilai parameter terbaik untuk model regresi logistik dan decision tree, mari rekonstruksi model-model tersebut lalu deteksi dan interpretasikan faktor-faktor utama yang mendorong churn naik atau turun.

Untuk model regresi logistik, kita akan mengekstrak dan menelaah eksponen dari koefisien hasil:

# Reconstructing the best model
lr = LogisticRegression(penalty='l1', C=0.05, solver='liblinear')
lr.fit(X_train, y_train)
predictions = lr.predict(X_test)

# Combining feature names and coefficients into one dataframe
feature_names = pd.DataFrame(X_train.columns, columns=['Feature'])
log_coef = pd.DataFrame(np.transpose(lr.coef_), columns=['Coefficient'])
coefficients = pd.concat([feature_names, log_coef], axis=1)

# Calculating exponents of the coefficients
coefficients['Exp_Coefficient'] = np.exp(coefficients['Coefficient'])

# Removing coefficients that are equal to zero
coefficients = coefficients[coefficients['Coefficient']!=0]
print(coefficients.sort_values(by=['Exp_Coefficient']))
                          Feature  Coefficient  Exp_Coefficient
21                          tenure    -0.907750         0.403431
4                 PhoneService_Yes    -0.820517         0.440204
17               Contract_Two year    -0.595271         0.551413
8                  TechSupport_Yes    -0.418254         0.658195
16               Contract_One year    -0.414158         0.660896
5               OnlineSecurity_Yes    -0.412228         0.662173
6                 OnlineBackup_Yes    -0.143100         0.866667
3                   Dependents_Yes    -0.039299         0.961463
7             DeviceProtection_Yes    -0.017465         0.982687
11            PaperlessBilling_Yes     0.071389         1.073999
1                SeniorCitizen_Yes     0.097904         1.102857
19  PaymentMethod_Electronic check     0.188533         1.207477
22                  MonthlyCharges     0.901454         2.463182

Kita dapat melihat bahwa fitur dengan efek terbesar pada peluang terjadinya churn adalah tenure. Secara umum, eksponen koefisien yang lebih kecil dari 1 menurunkan peluang, sedangkan yang lebih besar dari 1 meningkatkannya.

Untuk model decision tree, kita akan mengekstrak dan memplot aturan if-else:

# Reconstructing the best model
clf = DecisionTreeClassifier(max_depth=5)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

from sklearn import tree
import graphviz

# Exporting a graphviz object from the trained decision tree
exported = tree.export_graphviz(decision_tree=clf,
                                out_file=None,
                                feature_names=cols,
                                precision=1,
                                class_names=['Not churn', 'Churn'],
                                filled=True)
graph = graphviz.Source(exported)
display(graph)

Machine Learning Decision Tree

Kita mendapatkan visualisasi decision tree yang enak dipandang dan dapat diinterpretasikan sebagai serangkaian aturan if-else dari bagian atas. Sekali lagi kita melihat bahwa tenure pelanggan adalah variabel terpenting yang mendorong churn. Decision tree dapat dibangun dengan lebih banyak lapisan, dan ini akan memberikan lebih banyak wawasan tentang variabel lainnya.

Ke depan, kita dapat mencoba menyesuaikan parameter model lebih lanjut, menggunakan pendekatan berbeda untuk pembagian train/test, menerapkan dan membandingkan algoritme machine learning lainnya, serta menganalisis berbagai jenis skor untuk mengukur kinerja model.

Jika Anda tertarik menggali lebih dalam tentang prediksi customer churn rate dan aplikasi data science lainnya dalam pemasaran, kursus ini tentang Machine Learning for Marketing in Python bisa menjadi tempat yang baik untuk memulai.

Topik
Data Science
Machine Learning
Terkait

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak