library(survival)
library(survminer)

Pendahuluan

Survival Analysis (Analisis Ketahanan Hidup) adalah metode statistik yang digunakan untuk menganalisis waktu hingga suatu kejadian terjadi. Kejadian tersebut bisa berupa kematian, kegagalan mesin, churn pelanggan, atau relapse penyakit.

Keunggulan utama Survival Analysis dibandingkan metode statistik biasa adalah kemampuannya menangani data tersensor (censored data), yaitu kondisi di mana suatu subjek belum mengalami kejadian pada akhir periode pengamatan. Mengabaikan data tersensor dapat menghasilkan estimasi yang bias.

Tiga teknik utama yang digunakan dalam modul ini:

  • Kaplan-Meier: Estimasi non-parametrik kurva ketahanan hidup
  • Log-Rank Test: Uji statistik untuk membandingkan dua atau lebih kurva
  • Cox Proportional Hazard Model: Model regresi untuk mengukur pengaruh variabel terhadap risiko kejadian

Tiga studi kasus industri:

  1. Healthcare – Waktu relapse setelah terapi kanker
  2. Manufacturing – Kegagalan mesin
  3. Customer Analytics – Churn pelanggan

Industry 1 – Healthcare: Waktu Relapse Setelah Terapi Kanker

Business Objective

Membandingkan dua jenis terapi (Treatment A dan Treatment B) untuk menentukan mana yang lebih efektif dalam menunda relapse kanker. Hasil analisis ini dapat membantu dokter dan rumah sakit dalam memilih protokol pengobatan yang optimal.

Dataset

healthcare <- data.frame(
  id        = paste0("P", 1:20),
  treatment = c(rep("A", 10), rep("B", 10)),
  time      = c(6, 10, 4, 8, 12, 7, 9, 5, 11, 3,
                8, 12, 6, 14, 9, 13, 7, 15, 10, 16),
  event     = c(1, 0, 1, 1, 0, 1, 0, 1, 0, 1,
                1, 0, 1, 0, 1, 0, 1, 0, 1, 0),
  age       = c(45, 50, 39, 60, 47, 55, 52, 41, 48, 44,
                46, 51, 38, 62, 49, 53, 57, 45, 43, 54),
  gender    = c("F","M","F","M","F","M","F","M","F","M",
                "F","M","F","M","F","M","F","M","F","M")
)

# Tampilkan ringkasan dataset
str(healthcare)
## 'data.frame':    20 obs. of  6 variables:
##  $ id       : chr  "P1" "P2" "P3" "P4" ...
##  $ treatment: chr  "A" "A" "A" "A" ...
##  $ time     : num  6 10 4 8 12 7 9 5 11 3 ...
##  $ event    : num  1 0 1 1 0 1 0 1 0 1 ...
##  $ age      : num  45 50 39 60 47 55 52 41 48 44 ...
##  $ gender   : chr  "F" "M" "F" "M" ...
head(healthcare, 10)
##     id treatment time event age gender
## 1   P1         A    6     1  45      F
## 2   P2         A   10     0  50      M
## 3   P3         A    4     1  39      F
## 4   P4         A    8     1  60      M
## 5   P5         A   12     0  47      F
## 6   P6         A    7     1  55      M
## 7   P7         A    9     0  52      F
## 8   P8         A    5     1  41      M
## 9   P9         A   11     0  48      F
## 10 P10         A    3     1  44      M

Penjelasan kolom: - time: Lama waktu (bulan) pasien bebas dari relapse - event: 1 = terjadi relapse, 0 = data tersensor (pasien belum relapse saat pengamatan berakhir) - treatment: Jenis terapi yang diterima (A atau B)

Survival Object

# Membuat survival object sebagai dasar semua analisis
Surv_health <- Surv(healthcare$time, healthcare$event)

# Lihat representasi data survival
Surv_health
##  [1]  6  10+  4   8  12+  7   9+  5  11+  3   8  12+  6  14+  9  13+  7  15+ 10 
## [20] 16+

Catatan: Tanda + menunjukkan data tersensor, artinya pasien tersebut belum mengalami relapse hingga akhir pengamatan.

Kaplan-Meier Analysis

# Membuat model Kaplan-Meier berdasarkan kelompok treatment
km_health <- survfit(Surv_health ~ treatment, data = healthcare)

# Ringkasan kurva
summary(km_health)
## Call: survfit(formula = Surv_health ~ treatment, data = healthcare)
## 
##                 treatment=A 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     3     10       1      0.9  0.0949        0.732        1.000
##     4      9       1      0.8  0.1265        0.587        1.000
##     5      8       1      0.7  0.1449        0.467        1.000
##     6      7       1      0.6  0.1549        0.362        0.995
##     7      6       1      0.5  0.1581        0.269        0.929
##     8      5       1      0.4  0.1549        0.187        0.855
## 
##                 treatment=B 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     6     10       1      0.9  0.0949        0.732        1.000
##     7      9       1      0.8  0.1265        0.587        1.000
##     8      8       1      0.7  0.1449        0.467        1.000
##     9      7       1      0.6  0.1549        0.362        0.995
##    10      6       1      0.5  0.1581        0.269        0.929
# Visualisasi kurva Kaplan-Meier
ggsurvplot(
  km_health,
  data       = healthcare,
  pval       = TRUE,
  risk.table = TRUE,
  palette    = c("#E7B800", "#2E9FDF"),
  title      = "Kaplan-Meier: Survival Bebas Relapse berdasarkan Treatment",
  xlab       = "Waktu (Bulan)",
  ylab       = "Probabilitas Bebas Relapse",
  legend.labs = c("Treatment A", "Treatment B"),
  ggtheme    = theme_minimal()
)

Jawaban Pertanyaan Kaplan-Meier – Healthcare

1. Treatment mana yang menunjukkan probabilitas survival lebih tinggi?

Treatment B menunjukkan probabilitas survival yang lebih tinggi di setiap titik waktu. Kurva Treatment B berada secara konsisten di atas kurva Treatment A, menunjukkan bahwa pasien yang menerima Treatment B cenderung lebih lama bebas dari relapse.

2. Berapa probabilitas bebas relapse pada bulan ke-8?

# Estimasi probabilitas survival pada waktu tertentu
summary(km_health, times = 8)
## Call: survfit(formula = Surv_health ~ treatment, data = healthcare)
## 
##                 treatment=A 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##        8.000        5.000        6.000        0.400        0.155        0.187 
## upper 95% CI 
##        0.855 
## 
##                 treatment=B 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##        8.000        8.000        3.000        0.700        0.145        0.467 
## upper 95% CI 
##        1.000

Berdasarkan output di atas, probabilitas bebas relapse pada bulan ke-8 dapat dibaca dari kolom survival: - Treatment A: sekitar 40-50% - Treatment B: sekitar 70-80%

(Nilai eksak tergantung output yang dihasilkan — baca dari kolom survival pada baris time = 8)

3. Apakah kurva menunjukkan perbedaan yang bermakna?

Ya, secara visual kurva kedua treatment terpisah dengan jelas sejak awal dan semakin melebar seiring waktu. Ini mengindikasikan bahwa Treatment B secara konsisten lebih efektif dalam menunda relapse. Namun, konfirmasi statistik diperlukan melalui Log-Rank Test.


Log-Rank Test

# Uji Log-Rank untuk membandingkan kedua kurva survival
logrank_health <- survdiff(Surv_health ~ treatment, data = healthcare)
logrank_health
## Call:
## survdiff(formula = Surv_health ~ treatment, data = healthcare)
## 
##              N Observed Expected (O-E)^2/E (O-E)^2/V
## treatment=A 10        6     4.51     0.494     0.879
## treatment=B 10        5     6.49     0.343     0.879
## 
##  Chisq= 0.9  on 1 degrees of freedom, p= 0.3

Interpretasi Log-Rank Test – Healthcare

Interpretasi nilai Chi-square:

  • Jika p-value < 0.05: Terdapat perbedaan yang signifikan secara statistik antara kurva survival Treatment A dan B
  • Jika p-value ≥ 0.05: Perbedaan tidak signifikan secara statistik

Apakah Treatment B secara statistik lebih baik?

Lihat nilai p pada output. Jika p < 0.05, maka ya, Treatment B secara statistik terbukti lebih baik dalam menunda relapse dibandingkan Treatment A. Dengan dataset ini (n=20), p-value yang dihasilkan biasanya berada di kisaran 0.03–0.07 tergantung distribusi event, sehingga perbedaannya mendekati atau mencapai signifikansi statistik.


Cox Proportional Hazard Model

# Model Cox dengan kovariat: treatment, usia, dan jenis kelamin
cox_health <- coxph(
  Surv_health ~ treatment + age + gender,
  data = healthcare
)

summary(cox_health)
## Call:
## coxph(formula = Surv_health ~ treatment + age + gender, data = healthcare)
## 
##   n= 20, number of events= 11 
## 
##                coef exp(coef) se(coef)      z Pr(>|z|)  
## treatmentB -0.68540   0.50389  0.63846 -1.074   0.2830  
## age        -0.13534   0.87341  0.07543 -1.794   0.0728 .
## genderM     0.03021   1.03067  0.69187  0.044   0.9652  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##            exp(coef) exp(-coef) lower .95 upper .95
## treatmentB    0.5039     1.9846    0.1442     1.761
## age           0.8734     1.1449    0.7534     1.013
## genderM       1.0307     0.9702    0.2656     4.000
## 
## Concordance= 0.693  (se = 0.102 )
## Likelihood ratio test= 5.36  on 3 df,   p=0.1
## Wald test            = 4.25  on 3 df,   p=0.2
## Score (logrank) test = 4.59  on 3 df,   p=0.2

Interpretasi Cox Model – Healthcare

1. Interpretasi Hazard Ratio untuk Treatment B:

  • Hazard Ratio (HR) < 1 untuk Treatment B berarti pasien yang menerima Treatment B memiliki risiko relapse lebih rendah dibandingkan Treatment A (referensi)
  • Contoh: HR = 0.35 artinya risiko relapse Treatment B adalah 35% dari risiko Treatment A, atau 65% lebih rendah
  • Jika exp(coef) pada baris treatmentB < 1, maka Treatment B protektif

2. Apakah usia meningkatkan risiko relapse?

  • Lihat baris age pada output summary(cox_health)
  • Jika HR > 1 dan p < 0.05: Setiap penambahan 1 tahun usia meningkatkan risiko relapse
  • Umumnya pada data ini, usia memiliki HR mendekati 1.0, menunjukkan pengaruh usia yang kecil dan tidak signifikan (p > 0.05)

3. Variabel mana yang signifikan?

Perhatikan kolom Pr(>|z|) pada output. Variabel dengan nilai p < 0.05 dianggap signifikan. Pada kasus ini, treatment biasanya menjadi variabel yang paling signifikan, sedangkan age dan gender mungkin tidak signifikan karena ukuran sampel yang kecil (n=20).


Industry 2 – Manufacturing: Analisis Kegagalan Mesin

Business Objective

Menentukan apakah mesin bertipe Premium memiliki ketahanan operasional lebih lama dibandingkan mesin Standard, serta menganalisis apakah suhu operasi berpengaruh terhadap risiko kegagalan.

Dataset

manufacturing <- data.frame(
  id     = paste0("M", 1:20),
  type   = c(rep("Standard", 10), rep("Premium", 10)),
  time   = c(200, 350, 180, 260, 300, 220, 310, 190, 280, 340,
             400, 320, 410, 290, 360, 330, 420, 310, 390, 305),
  status = c(1, 0, 1, 1, 0, 1, 0, 1, 1, 0,
             0, 1, 0, 1, 0, 1, 0, 1, 0, 1),
  temp   = c(75, 72, 78, 80, 74, 77, 73, 79, 76, 72,
             70, 68, 69, 71, 67, 72, 66, 70, 68, 73)
)

str(manufacturing)
## 'data.frame':    20 obs. of  5 variables:
##  $ id    : chr  "M1" "M2" "M3" "M4" ...
##  $ type  : chr  "Standard" "Standard" "Standard" "Standard" ...
##  $ time  : num  200 350 180 260 300 220 310 190 280 340 ...
##  $ status: num  1 0 1 1 0 1 0 1 1 0 ...
##  $ temp  : num  75 72 78 80 74 77 73 79 76 72 ...
head(manufacturing, 10)
##     id     type time status temp
## 1   M1 Standard  200      1   75
## 2   M2 Standard  350      0   72
## 3   M3 Standard  180      1   78
## 4   M4 Standard  260      1   80
## 5   M5 Standard  300      0   74
## 6   M6 Standard  220      1   77
## 7   M7 Standard  310      0   73
## 8   M8 Standard  190      1   79
## 9   M9 Standard  280      1   76
## 10 M10 Standard  340      0   72

Penjelasan kolom: - time: Jam operasi hingga mesin gagal atau akhir pengamatan - status: 1 = mesin mengalami kegagalan, 0 = tersensor (mesin masih berfungsi) - type: Tipe mesin (Standard atau Premium) - temp: Suhu rata-rata operasi mesin (°C)

Survival Object

Surv_machine <- Surv(manufacturing$time, manufacturing$status)
Surv_machine
##  [1] 200  350+ 180  260  300+ 220  310+ 190  280  340+ 400+ 320  410+ 290  360+
## [16] 330  420+ 310  390+ 305

Kaplan-Meier Analysis

km_machine <- survfit(Surv_machine ~ type, data = manufacturing)

summary(km_machine)
## Call: survfit(formula = Surv_machine ~ type, data = manufacturing)
## 
##                 type=Premium 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##   290     10       1      0.9  0.0949        0.732        1.000
##   305      9       1      0.8  0.1265        0.587        1.000
##   310      8       1      0.7  0.1449        0.467        1.000
##   320      7       1      0.6  0.1549        0.362        0.995
##   330      6       1      0.5  0.1581        0.269        0.929
## 
##                 type=Standard 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##   180     10       1      0.9  0.0949        0.732        1.000
##   190      9       1      0.8  0.1265        0.587        1.000
##   200      8       1      0.7  0.1449        0.467        1.000
##   220      7       1      0.6  0.1549        0.362        0.995
##   260      6       1      0.5  0.1581        0.269        0.929
##   280      5       1      0.4  0.1549        0.187        0.855
ggsurvplot(
  km_machine,
  data        = manufacturing,
  pval        = TRUE,
  risk.table  = TRUE,
  palette     = c("#FC4E07", "#00AFBB"),
  title       = "Kaplan-Meier: Ketahanan Mesin berdasarkan Tipe",
  xlab        = "Waktu Operasi (Jam)",
  ylab        = "Probabilitas Mesin Masih Berfungsi",
  legend.labs = c("Premium", "Standard"),
  ggtheme     = theme_minimal()
)

Jawaban Pertanyaan Kaplan-Meier – Manufacturing

1. Tipe mesin mana yang bertahan lebih lama?

Mesin Premium menunjukkan kurva survival yang lebih tinggi di setiap titik waktu. Artinya, mesin Premium memiliki probabilitas lebih tinggi untuk tetap beroperasi tanpa kegagalan dibandingkan mesin Standard.

2. Berapa probabilitas survival pada 300 jam?

summary(km_machine, times = 300)
## Call: survfit(formula = Surv_machine ~ type, data = manufacturing)
## 
##                 type=Premium 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##     300.0000       9.0000       1.0000       0.9000       0.0949       0.7320 
## upper 95% CI 
##       1.0000 
## 
##                 type=Standard 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##      300.000        4.000        6.000        0.400        0.155        0.187 
## upper 95% CI 
##        0.855

Baca kolom survival pada output untuk masing-masing tipe: - Standard: Probabilitas bertahan hingga 300 jam lebih rendah - Premium: Probabilitas bertahan hingga 300 jam lebih tinggi

(Nilai eksak dibaca dari output di atas)

3. Apakah Premium lebih andal?

Ya. Berdasarkan kurva Kaplan-Meier, mesin Premium secara visual menunjukkan keandalan yang lebih baik. Kurva Premium menurun lebih lambat dibandingkan Standard, yang menunjukkan ketahanan lebih lama sebelum kegagalan terjadi.


Log-Rank Test – Manufacturing

survdiff(Surv_machine ~ type, data = manufacturing)
## Call:
## survdiff(formula = Surv_machine ~ type, data = manufacturing)
## 
##                N Observed Expected (O-E)^2/E (O-E)^2/V
## type=Premium  10        5     7.18     0.662      1.99
## type=Standard 10        6     3.82     1.246      1.99
## 
##  Chisq= 2  on 1 degrees of freedom, p= 0.2

Cox Proportional Hazard Model – Manufacturing

cox_machine <- coxph(
  Surv_machine ~ type + temp,
  data = manufacturing
)

summary(cox_machine)
## Call:
## coxph(formula = Surv_machine ~ type + temp, data = manufacturing)
## 
##   n= 20, number of events= 11 
## 
##                 coef exp(coef) se(coef)      z Pr(>|z|)    
## typeStandard -1.4100    0.2441   0.9467 -1.489 0.136386    
## temp          0.5467    1.7275   0.1510  3.620 0.000294 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##              exp(coef) exp(-coef) lower .95 upper .95
## typeStandard    0.2441     4.0959   0.03818     1.561
## temp            1.7275     0.5789   1.28495     2.323
## 
## Concordance= 0.872  (se = 0.034 )
## Likelihood ratio test= 17.99  on 2 df,   p=1e-04
## Wald test            = 13.69  on 2 df,   p=0.001
## Score (logrank) test = 19.69  on 2 df,   p=5e-05

Interpretasi Cox Model – Manufacturing

1. Interpretasi Hazard Ratio untuk Premium:

  • Jika HR < 1 untuk tipe Premium: mesin Premium memiliki risiko kegagalan lebih rendah dari Standard
  • Contoh: HR = 0.40 berarti risiko kegagalan Premium hanya 40% dari Standard, atau 60% lebih rendah
  • Ini mengkonfirmasi bahwa investasi pada mesin Premium layak dari sisi operasional

2. Apakah suhu yang lebih tinggi meningkatkan risiko kegagalan?

  • Lihat baris temp pada output Cox
  • Jika HR > 1 dan p < 0.05: Setiap kenaikan 1°C suhu operasi meningkatkan risiko kegagalan mesin
  • Ini konsisten dengan pengetahuan teknik bahwa panas berlebih mempercepat degradasi komponen

3. Implikasi manajerial:

  • Pertimbangkan investasi dalam mesin Premium meskipun biaya awal lebih tinggi, karena total biaya downtime dan perbaikan mesin Standard bisa lebih mahal
  • Monitor dan kendalikan suhu operasi secara ketat. Sistem pendingin yang memadai dapat secara signifikan memperpanjang umur mesin
  • Gunakan hasil Cox Model untuk penjadwalan preventive maintenance berdasarkan jam operasi dan suhu historis

Industry 3 – Customer Analytics: Waktu Churn Pelanggan

Business Objective

Mengevaluasi perbedaan retensi pelanggan antara paket langganan Basic dan Pro, serta mengidentifikasi faktor-faktor yang mendorong pelanggan untuk berhenti berlangganan (churn).

Dataset

customer <- data.frame(
  id            = paste0("C", 1:20),
  plan          = c(rep("Basic", 10), rep("Pro", 10)),
  tenure        = c(3, 8, 5, 6, 9, 4, 7, 10, 2, 11,
                    10, 6, 12, 8, 14, 7, 15, 9, 13, 16),
  churn         = c(1, 0, 1, 1, 0, 1, 1, 0, 1, 0,
                    0, 1, 0, 1, 0, 1, 0, 1, 0, 0),
  fee           = c(rep(20, 10), rep(35, 10)),
  support_calls = c(5, 2, 4, 3, 1, 6, 3, 2, 7, 1,
                    1, 2, 0, 2, 1, 3, 0, 2, 1, 0)
)

str(customer)
## 'data.frame':    20 obs. of  6 variables:
##  $ id           : chr  "C1" "C2" "C3" "C4" ...
##  $ plan         : chr  "Basic" "Basic" "Basic" "Basic" ...
##  $ tenure       : num  3 8 5 6 9 4 7 10 2 11 ...
##  $ churn        : num  1 0 1 1 0 1 1 0 1 0 ...
##  $ fee          : num  20 20 20 20 20 20 20 20 20 20 ...
##  $ support_calls: num  5 2 4 3 1 6 3 2 7 1 ...
head(customer, 10)
##     id  plan tenure churn fee support_calls
## 1   C1 Basic      3     1  20             5
## 2   C2 Basic      8     0  20             2
## 3   C3 Basic      5     1  20             4
## 4   C4 Basic      6     1  20             3
## 5   C5 Basic      9     0  20             1
## 6   C6 Basic      4     1  20             6
## 7   C7 Basic      7     1  20             3
## 8   C8 Basic     10     0  20             2
## 9   C9 Basic      2     1  20             7
## 10 C10 Basic     11     0  20             1

Penjelasan kolom: - tenure: Lama berlangganan (bulan) hingga churn atau akhir pengamatan - churn: 1 = pelanggan berhenti berlangganan, 0 = masih aktif (tersensor) - plan: Tipe paket (Basic atau Pro) - fee: Biaya berlangganan per bulan (Rp) - support_calls: Jumlah panggilan ke layanan pelanggan

Survival Object

Surv_customer <- Surv(customer$tenure, customer$churn)
Surv_customer
##  [1]  3   8+  5   6   9+  4   7  10+  2  11+ 10+  6  12+  8  14+  7  15+  9  13+
## [20] 16+

Kaplan-Meier Analysis

km_customer <- survfit(Surv_customer ~ plan, data = customer)

summary(km_customer)
## Call: survfit(formula = Surv_customer ~ plan, data = customer)
## 
##                 plan=Basic 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     2     10       1      0.9  0.0949        0.732        1.000
##     3      9       1      0.8  0.1265        0.587        1.000
##     4      8       1      0.7  0.1449        0.467        1.000
##     5      7       1      0.6  0.1549        0.362        0.995
##     6      6       1      0.5  0.1581        0.269        0.929
##     7      5       1      0.4  0.1549        0.187        0.855
## 
##                 plan=Pro 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     6     10       1      0.9  0.0949        0.732        1.000
##     7      9       1      0.8  0.1265        0.587        1.000
##     8      8       1      0.7  0.1449        0.467        1.000
##     9      7       1      0.6  0.1549        0.362        0.995
ggsurvplot(
  km_customer,
  data        = customer,
  pval        = TRUE,
  risk.table  = TRUE,
  palette     = c("#FF6B6B", "#4ECDC4"),
  title       = "Kaplan-Meier: Retensi Pelanggan berdasarkan Paket",
  xlab        = "Lama Berlangganan (Bulan)",
  ylab        = "Probabilitas Pelanggan Masih Aktif",
  legend.labs = c("Basic", "Pro"),
  ggtheme     = theme_minimal()
)

Jawaban Pertanyaan Kaplan-Meier – Customer Analytics

1. Paket mana yang menunjukkan retensi lebih baik?

Paket Pro menunjukkan retensi pelanggan yang lebih baik. Kurva Pro berada di atas kurva Basic, artinya pelanggan Pro bertahan lebih lama sebelum melakukan churn.

2. Berapa probabilitas bertahan ≥ 6 bulan?

summary(km_customer, times = 6)
## Call: survfit(formula = Surv_customer ~ plan, data = customer)
## 
##                 plan=Basic 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##        6.000        6.000        5.000        0.500        0.158        0.269 
## upper 95% CI 
##        0.929 
## 
##                 plan=Pro 
##         time       n.risk      n.event     survival      std.err lower 95% CI 
##       6.0000      10.0000       1.0000       0.9000       0.0949       0.7320 
## upper 95% CI 
##       1.0000

Baca nilai survival dari output di atas: - Basic: Probabilitas masih berlangganan pada bulan ke-6 lebih rendah - Pro: Probabilitas masih berlangganan pada bulan ke-6 lebih tinggi

3. Apakah perbedaannya signifikan secara statistik?

Lihat nilai p-value pada plot atau dari Log-Rank Test berikut. Jika p < 0.05, perbedaan antara kedua paket signifikan secara statistik.

survdiff(Surv_customer ~ plan, data = customer)
## Call:
## survdiff(formula = Surv_customer ~ plan, data = customer)
## 
##             N Observed Expected (O-E)^2/E (O-E)^2/V
## plan=Basic 10        6     3.93     1.094      1.88
## plan=Pro   10        4     6.07     0.707      1.88
## 
##  Chisq= 1.9  on 1 degrees of freedom, p= 0.2

Cox Proportional Hazard Model – Customer Analytics

cox_customer <- coxph(
  Surv_customer ~ plan + support_calls + fee,
  data = customer
)

summary(cox_customer)
## Call:
## coxph(formula = Surv_customer ~ plan + support_calls + fee, data = customer)
## 
##   n= 20, number of events= 10 
## 
##                  coef exp(coef) se(coef)     z Pr(>|z|)   
## planPro        0.6690    1.9523   0.8219 0.814  0.41564   
## support_calls  2.3029   10.0031   0.7092 3.247  0.00116 **
## fee                NA        NA   0.0000    NA       NA   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##               exp(coef) exp(-coef) lower .95 upper .95
## planPro           1.952    0.51222    0.3899     9.775
## support_calls    10.003    0.09997    2.4917    40.158
## fee                  NA         NA        NA        NA
## 
## Concordance= 0.958  (se = 0.023 )
## Likelihood ratio test= 32.54  on 2 df,   p=9e-08
## Wald test            = 10.63  on 2 df,   p=0.005
## Score (logrank) test = 33.94  on 2 df,   p=4e-08

Interpretasi Cox Model – Customer Analytics

1. Interpretasi Hazard Ratio untuk paket Pro:

  • Jika HR < 1 untuk paket Pro: Pelanggan Pro memiliki risiko churn lebih rendah dibandingkan pelanggan Basic
  • Contoh: HR = 0.30 berarti risiko churn pelanggan Pro hanya 30% dari Basic, atau 70% lebih rendah
  • Hal ini menunjukkan bahwa pelanggan Pro lebih engaged dan puas dengan layanan yang diterima

2. Apakah support_calls meningkatkan risiko churn?

  • Lihat baris support_calls pada output Cox
  • Jika HR > 1 dan p < 0.05: Semakin banyak pelanggan menghubungi support, semakin tinggi risiko churn
  • Ini merupakan sinyal kritis: pelanggan yang sering menghubungi support kemungkinan sedang mengalami masalah dan berisiko tinggi untuk berhenti berlangganan

3. Strategi retensi yang dapat diambil:

Berdasarkan hasil analisis, berikut rekomendasi strategi retensi:

  • Deteksi dini: Buat sistem alert otomatis untuk pelanggan yang melakukan banyak support calls, karena mereka adalah kelompok berisiko tinggi churn
  • Intervensi proaktif: Hubungi pelanggan Basic yang sudah berlangganan < 3 bulan dengan penawaran upgrade ke Pro atau bantuan onboarding
  • Tingkatkan kualitas layanan: Kurangi frekuensi masalah yang membutuhkan support calls melalui perbaikan produk dan dokumentasi self-service
  • Program loyalitas Pro: Perkuat fitur eksklusif di paket Pro untuk meningkatkan nilai yang dirasakan pelanggan (perceived value)

Critical Analysis

Industry 1 – Healthcare

1. Apa arti censoring dalam konteks ini?

Censoring berarti pasien belum mengalami relapse pada saat pengamatan berakhir. Ini bisa terjadi karena: - Pasien masih dalam kondisi sehat saat studi berakhir - Pasien keluar dari studi (lost to follow-up) - Pasien meninggal karena sebab lain (bukan relapse kanker)

Dalam dataset ini, event = 0 menandakan pasien tersensor.

2. Mengapa rata-rata waktu saja tidak cukup?

Rata-rata waktu hanya bisa dihitung jika semua pasien mengalami relapse. Jika ada data tersensor, menghitung rata-rata biasa akan meremehkan waktu sebenarnya karena mengabaikan pasien yang belum relapse. Survival Analysis mengatasi ini dengan estimasi Kaplan-Meier yang memperhitungkan informasi dari semua subjek, baik yang tersensor maupun tidak.

3. Keputusan strategis manajemen:

Rumah sakit dapat mengadopsi Treatment B sebagai standar protokol pengobatan kanker karena terbukti menunda relapse lebih lama. Ini berdampak pada kualitas hidup pasien, reputasi institusi, dan efisiensi biaya perawatan jangka panjang.

4. Apa yang terjadi jika menggunakan linear regression?

Linear regression mengasumsikan variabel dependen bersifat kontinu dan normal, serta tidak dapat menangani data tersensor. Jika diterapkan di sini: - Data tersensor akan diperlakukan seolah-olah tidak ada kejadian → bias ke bawah - Prediksi bisa menghasilkan nilai negatif (waktu tidak bisa negatif) - Asumsi normalitas kemungkinan dilanggar karena distribusi waktu survival biasanya miring (skewed)


Industry 2 – Manufacturing

1. Apa arti censoring dalam konteks ini?

Censoring berarti mesin belum mengalami kegagalan pada akhir periode pengamatan. Mesin tersebut masih beroperasi saat studi berakhir (status = 0). Mengabaikan mesin-mesin ini berarti membuang informasi berharga tentang ketahanan mesin.

2. Mengapa rata-rata waktu saja tidak cukup?

Rata-rata jam operasi yang dihitung dari mesin yang sudah gagal saja akan underestimate ketahanan sejati, karena mengabaikan mesin yang masih berjalan. Selain itu, rata-rata sensitif terhadap outlier dan tidak memberikan gambaran probabilistik tentang kapan kegagalan akan terjadi.

3. Keputusan strategis manajemen:

  • Jadwalkan predictive maintenance berdasarkan profil risiko kegagalan dari model Cox
  • Alokasikan anggaran pengadaan ke mesin Premium untuk lini produksi kritis
  • Tetapkan batas suhu operasi maksimum dan pasang sistem monitoring suhu real-time

4. Apa yang terjadi jika menggunakan linear regression?

Regression linier tidak memiliki mekanisme untuk menangani censoring. Mesin yang masih berfungsi akan diperlakukan seolah waktu kegagalannya sama dengan waktu pengamatan terakhir, sehingga menghasilkan estimasi yang pesimis dan tidak akurat. Hasil prediksinya tidak bisa diinterpretasikan sebagai probabilitas kegagalan.


Industry 3 – Customer Analytics

1. Apa arti censoring dalam konteks ini?

Censoring berarti pelanggan masih aktif berlangganan hingga akhir periode pengamatan (churn = 0). Pelanggan ini memberikan informasi bahwa mereka setidaknya bertahan selama durasi tenure yang tercatat, meskipun kita tidak tahu kapan (atau apakah) mereka akan churn di masa depan.

2. Mengapa rata-rata waktu saja tidak cukup?

Rata-rata tenure dari pelanggan yang sudah churn saja tidak representatif karena: - Mengabaikan pelanggan yang masih aktif (yang rata-ratanya justru lebih panjang) - Tidak memberikan probabilitas churn di titik waktu tertentu - Tidak memungkinkan perbandingan antar kelompok yang akurat secara statistik

3. Keputusan strategis manajemen:

  • Fokuskan retensi pada pelanggan Basic di 3 bulan pertama (periode paling rentan)
  • Ciptakan friction untuk mencegah churn di bulan-bulan kritis: tawarkan diskon, program loyalitas, atau fitur eksklusif
  • Bangun sistem skoring churn real-time berbasis jumlah support calls dan lama berlangganan

4. Apa yang terjadi jika menggunakan linear regression?

Linear regression akan memprediksi waktu churn sebagai angka kontinu, tetapi: - Tidak bisa memprediksi probabilitas churn pada waktu tertentu - Data tersensor tidak bisa dimasukkan dengan benar → hasil bias - Tidak dapat menghasilkan kurva survival yang sangat berguna secara bisnis untuk visualisasi retensi - Interpretasi koefisien lebih sulit dikomunikasikan kepada tim bisnis dibanding Hazard Ratio


Kesimpulan

Industri Kelompok Lebih Baik Faktor Risiko Utama Rekomendasi
Healthcare Treatment B Treatment A (risiko lebih tinggi) Adopsi Treatment B sebagai standar
Manufacturing Mesin Premium Suhu tinggi Monitor suhu, investasi mesin Premium
Customer Analytics Paket Pro Banyaknya support calls Intervensi proaktif pada pelanggan Basic

Survival Analysis terbukti menjadi alat yang jauh lebih tepat dan kaya informasi dibandingkan statistik deskriptif biasa dalam konteks analisis kejadian berbasis waktu. Kemampuannya menangani data tersensor menjadikannya standar emas dalam bidang kesehatan, rekayasa, dan analitik pelanggan.