Minggu, 03 Maret 2019

Kapan pelanggan anda berhenti?

Sebuah analisa data untuk melihat perilaku pelanggan sebuah perusahaan Telekomunikasi, Sample data telecomunikasi diambil dari IMB Watson Analytic Website.

Layanan berbasis langganan biasanya mendapatkan profit dengan tiga cara berikut:
  1. Mencari pelanggan baru
  2. Menaikkan transaksi pelanggan
  3. Mempertahankan pelanggan existing.
Dalam analisa ini saya akan fokus pada retensi pelanggan, melakukan  eksplorasi data, dengan mengawali cleaning  data.
Beberapa pertanyaan yang berfokus pada segmen pelanggan untuk membantu memandu analisis, seperti siapa saja mudah berhenti berlangganan?, kenapa berhenti? bagaimana caranya agar mereka tidak berhenti? Terus promosi apa yang wajib dilakukan? Setelah pertanyaan ini terjawab, selanjutnya akan dibahas model prediktif churn pelanggan, dengan menggunakan berbagai model machine learning.

Gb1
Gb2


Berikut script R nya:
#---Library
library(tidyverse)
library(miscset)

#---Wrangling the Data
Sample data telecomunikasi diambil dari IMB Watson Analytic Website

df <- read.csv("d:/churn/WA_Fn-UseC_-Telco-Customer-Churn.csv")
Ubah variable SeniorCitizen menjadi factor

df$SeniorCitizen <- as.factor(df$SeniorCitizen)

#---Check missing value

df %>% map(~ sum(is.na(.)))

#---Masukkan data median ke data yang kosong

df <- df %>%
  mutate(TotalCharges = replace(TotalCharges,
                                is.na(TotalCharges),
                                median(TotalCharges, na.rm = T)))

# checking that the imputation worked
sum(is.na(df$TotalCharges))
#[1] 0 Ok

#---Exploring the Data
#Let’s start by taking a look at the unique values of the factor variables.
df_tbl <- df %>%
  select_if(is.factor) %>%
  summarise_all(n_distinct)

df_tbl[1:8] %>%
  print(width = Inf)
## # A tibble: 1 x 8
##   customerID gender SeniorCitizen Partner Dependents PhoneService MultipleLines InternetService
##        <int>  <int>         <int>   <int>      <int>        <int>         <int>           <int>
## 1       7043      2             2       2          2            2             3               3
df_tbl[9:15] %>%
  print(width = Inf)
## # A tibble: 1 x 7
##   OnlineSecurity OnlineBackup DeviceProtection TechSupport StreamingTV StreamingMovies Contract
##            <int>        <int>            <int>       <int>       <int>           <int>    <int>
## 1              3            3                3           3           3               3        3
df_tbl[16:18] %>%
  print(width = Inf)
## # A tibble: 1 x 3
##   PaperlessBilling PaymentMethod Churn
##              <int>         <int> <int>
## 1                2             4     2

#---Untuk menganalisa , saya akan menjawab pertanyaan
1. Apakah pelanggan pria cenderung lebih sering berhenti daripada pelanggan wanita?
2. Apakah senior citizen cenderung lebih banyak berhenti?
3. Apakah individu yg punya pasangan cenderung lebih sering berhenti berlangganan drpd pelanggan singgle?
4. Apakah pelanggan dependent people lebih banyak berhenti? daripada yang  no dependent?

#---Gender plot
ggplot(df) +
  geom_bar(aes(x = gender, fill = Churn), position = "dodge")#ok smilar
df %>%
  group_by(gender,Churn) %>%
  summarise(n=n())
## # A tibble: 4 x 3
## # Groups:   gender [?]
##   gender  Churn     n
##   <fctr> <fctr> <int>
## 1 Female     No  2549
## 2 Female    Yes   939
## 3   Male     No  2625
## 4   Male    Yes   930
#---Senior Citizen plot
ggplot(df) +
  geom_bar(aes(x = SeniorCitizen, fill = Churn), position = "dodge")#ok

df %>%
  group_by(SeniorCitizen) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 2 x 3
##   SeniorCitizen     n      freq
##          <fctr> <int>     <dbl>
## 1             0  5901 0.8378532
## 2             1  1142 0.1621468
df %>%
  group_by(SeniorCitizen, Churn) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 4 x 4
## # Groups:   SeniorCitizen [2]
##   SeniorCitizen  Churn     n      freq
##          <fctr> <fctr> <int>     <dbl>
## 1             0     No  4508 0.7639383
## 2             0    Yes  1393 0.2360617
## 3             1     No   666 0.5831874
## 4             1    Yes   476 0.4168126

#  Dari variable realtiaonship dapat dilihat,kira kira 16% of the customers are senior citizens, dan 
# 42% dari  senior citizens berhenti. Di sisi yang lain  84% of customers bukan senior citizens, hanya # 24% churn.  Hasilnya
# Menunjukkan bahwa senior citizen lebih banyak berhenti.
# Sekarang lihat people with partners

#---Partner plot
ggplot(df) +
  geom_bar(aes(x=Partner, fill = Churn), position = "dodge")
df %>%
  group_by(Partner) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 2 x 3
##   Partner     n      freq
##    <fctr> <int>     <dbl>
## 1      No  3641 0.5169672
## 2     Yes  3402 0.4830328
df %>%
  group_by(Partner, Churn) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 4 x 4
## # Groups:   Partner [2]
##   Partner  Churn     n      freq
##    <fctr> <fctr> <int>     <dbl>
## 1      No     No  2441 0.6704202
## 2      No    Yes  1200 0.3295798
## 3     Yes     No  2733 0.8033510
## 4     Yes    Yes   669 0.1966490

# Kira2 separo pelanggan punya pasangan, 20% nya berhenti, sisanya 33% tanpa pasangan tidak
 # berhenti.

#---Dependents category.
ggplot(df) +
  geom_bar(aes_string(x="Dependents", fill="Churn"), position = "dodge")

 df %>% group_by(Dependents, Churn) %>%
  summarise(n=n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 4 x 4
## # Groups:   Dependents [2]
##   Dependents  Churn     n      freq
##       <fctr> <fctr> <int>     <dbl>
## 1         No     No  3390 0.6872086
## 2         No    Yes  1543 0.3127914
## 3        Yes     No  1784 0.8454976
## 4        Yes    Yes   326 0.1545024
df %>% group_by(Dependents) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## # A tibble: 2 x 3
##   Dependents     n      freq
##       <fctr> <int>     <dbl>
## 1         No  4933 0.7004118
## 2        Yes  2110 0.2995882

# Hampir 30% pelanggan dependent ,15% nya berhenti. Lainnya 70% bukan dependent 31 %
# berhenti.

#---vizualisation blackbox-whiskers
# Senior Citizens
ggplot(df, aes(x = SeniorCitizen, y = TotalCharges)) +
  geom_boxplot() #ok
# Partner
ggplot(df, aes(x = Partner, y = TotalCharges)) +
   geom_boxplot()

# Bandingkan  total charges of senior citizens, people without partners,
# dan people without dependents.

#--- Lets compare them so that we can identify where we would potentially focus our efforts.

# ---Total charges and tenure of senior citizens
df %>%
  select(SeniorCitizen, Churn, TotalCharges, tenure) %>%
  filter(SeniorCitizen == 1, Churn == "Yes") %>%
  summarize(n = n(),
            total = sum(TotalCharges),
            avg_tenure = sum(tenure)/n)
## # A tibble: 1 x 3
##       n    total avg_tenure
##   <int>    <dbl>      <dbl>
## 1   476 882405.2   21.03361
# Total charges and tenure of people without a partner
df %>%
  select(Partner, Churn, TotalCharges, tenure) %>%
  filter(Partner == "No", Churn == "Yes") %>%
  summarise(n = n(),
            total = sum(TotalCharges),
            avg_tenure = sum(tenure)/n)
## # A tibble: 1 x 3
##       n   total avg_tenure
##   <int>   <dbl>      <dbl>
## 1  1200 1306776   13.17667
# Total charges and tenure of people without dependents
df %>%
  select(Dependents, Churn, TotalCharges, tenure) %>%
  filter(Dependents == "No", Churn == "Yes") %>%
  summarise(n = n(),
            total = sum(TotalCharges),
            avg_tenure = sum(tenure)/n)
## # A tibble: 1 x 3
##       n   total avg_tenure
##   <int>   <dbl>      <dbl>
## 1  1543 2261840   17.12314

#---Summary
# Customer Segment Total Charges
# Senior Citizens         900,000
# No Partners                 1,300,000
# No Dependents         2,300,000

#---Analisa akan difokuskan di variable Dependent yang mempunyai Total Charges 2,300,000.
dependents <- df %>% filter(Dependents == "No")

ggplotGrid(ncol=2,
lapply(c("PhoneService","MultipleLines","InternetService","OnlineSecurity","OnlineBackup",
         "DeviceProtection"),
       function(col){
         ggplot(dependents,aes_string(col)) + geom_bar(aes(fill=Churn),position="dodge")
       }))

ggplotGrid(ncol=2,
lapply(c("TechSupport","StreamingTV","StreamingMovies","Contract",
         "PaperlessBilling"),
       function(col){
         ggplot(dependents,aes_string(col)) + geom_bar(aes(fill=Churn),position="dodge")
       }))

ggplot(dependents) +
  geom_bar(aes(x=PaymentMethod,fill=Churn), position = "dodge")

Rekomendasi:
Melihat hasilnya, kami mendapatkan beberapa wawasan potensial. Berdasarkan wawasan ini, berikut adalah beberapa rekomendasi untuk meningkatkan retensi pelanggan:
1. Banyak orang dengan phone service churned. Pindah ke paket tanpa layanan untuk menhemat biaya.
2. Orang-orang dengan internet serat optik lebih banyak berhenti, dibandingkan dengan paket DSL, promosi penguranga harga untuk paket serat optik akan mengurangi pelanggan serat optik berhenti.
3. Pelanngan tanpa OnlineBackup ,device protection, and online security lebih sering berhenti, mungkin karena crash dan sering kehilangan file, bahkan mengalami fraud, dan hacked, jadi promosi keamanan jaringan mereka akan mencegah churn.
4. Demikian pula untuk OnlineBackup dan OnlineSecurity, mereka yang tanpa OnlineSecurity cenderung menghasilkan lebih banyak daripada yang berlangganan layanan ini. Menambahkan OnlineBackup ke paket mereka mungkin merupakan cara yang baik untuk mencegah churn.
5. Mereka yang tidak memiliki TechSupport cenderung churn lebih sering daripada mereka yang memiliki TechSupport. Memindahkan pelanggan ke akun InternetService mungkin merupakan cara potensial lain untuk mencegah churn.

  Ada sejumlah wawasan berbeda lainnya yang dapat kita peroleh dari data, tetapi ini akan menjadi daftar awal yang baik untuk menyelidiki lebih lanjut jika perusahaan memiliki set data yang lebih rinci.
Pada artikel berikutnya, saya akan mengembangkan model prediksi. Saya akan membuat beberapa asumsi tentang akuisisi pelanggan dan biaya retensi pelanggan. Ini akan memungkinkan saya untuk menempatkan jumlah biaya  aktual di belakang penghematan biaya potensial dari model saya.
Referensi:
www.rstudio.com

Tidak ada komentar:

Posting Komentar

Kapan Puncak Covid19 di Indonesia ?

Prediksi Covid19, kapan mencapai puncaknya? Selamat Idhul Fitri from Home, menjawab pertanyaan kapan covid19 mencapai puncaknya? ...