← 목록으로
이탈 점수 계산 로직 2026.03.14 ✍️ 최하영

이탈률 설계 고민

이탈률 설계 고민

지금 고민은 5가지 이다.

0. 가중치는 어떻게 설계할지

1. 배치 점수와 실시간 점수를 어떻게 함께 운영할지

이탈률 요소

이탈률 등급

  점수 기준
HIGH 80~100
MEDIUM 50~80
LOW 0~50

**<배치로 결정=""> -> 상태 기반 **

**<실시간> -> 행동 기반 **

{
  "event_id": 1000000000003,
  "timestamp": "2026-03-05T12:03:00.000Z",
  "event": "click",
  "event_name": "click_compare",
  "event_properties": {
    "page_url": "<https://api.holliverse.site/api/v1/customer/compare>",
    "target_id": 10,
    "target_tags": ["영상OTT", "가성비", "가족결합"]
  }
}

{
  "event_id": 1000000000007,
  "timestamp": "2026-03-05T12:07:00.000Z",
  "event": "click",
  "event_name": "click_penalty",
  "event_properties": {
    "page_url": "<https://api.holliverse.site/api/v1/customer/mypage/penalty>"
  }
}

가중치 설계 원칙

  1. 상태 기반 feature < 행동 기반 feature

행동이 실제 이탈의도에 더 가까움

  1. 행동 중에도,

비교 -> 위약금 조회 -> 해지 진입 순서로 강도가 올라감

  1. 상담 기반 signal은 감정 + 키워드 결합시 강한 신호

  2. 배치 feature는 기본 점수 + 실시간 점수는 가산 점수 이다.

2. 최종 점수

추천 구조

final_score = min(100, base_score + realtime_score)

배치 기반 Feature 가중치

행동보다 약하고, base score는 최대 55점이 되게 한다.

이유는 실시간 행동이 들어오면 High로 올라갈 수 있게 최대치를 정해둔다.

base_score max = 55

1) 계약기반 feature

- 약정 종료 남은 기간

남은 주 점수
0~2주 +20
3~4주 +16
5~8주 +12
9~12주 +8
13주 이상 0

이유 약정 종료는 telecom churn 연구에서 가장 강한 구조적 변수입니다.

- 가입 기간

가입 기간 점수
0~4주 +10
1~3개월 +6
3개월 이상 0

이유 초기 churn 구간.

2) 행동 feature

- 요금제 변경 이력 (3개월)

횟수 점수
0 0
1 +5
2 +8
3 이상 +15

이유 요금제 변경은 가격 민감도 signal

3) 가격 대비 사용량 기반 feature

usage_ratio = 실제 사용 / 제공 데이터

usage_ratio 점수
0~10% +15
10~30% +12
30~50% +8
50% 이상 0

이유 고객이 요금제를 과지불(overpay)하는 상태

4) 상담 만족도 feature

평균 점수 점수
1.0~1.9 +15
2.0~2.9 +10
3.0~3.9 +5
4.0 이상 0

이유 CS dissatisfaction은 churn driver.

배치 점수 최대

20 + 10 + 15 + 15 + 15

≈ 75점

실시간 기반 Feature 가중치

실시간은 intent signal이라 점수를 더 부여를 한다. 추천 realtime_score max는 60으로 한다.

요금제 비교 (Click_compare)

문제 -> 클릭을 많이 눌렀을때의 제한 ?

정제 규칙: 같은 세션 30초 내 클릭 = 1회로 본다.

비교 세션 수 점수
1 +8
2 +12
3 이상 +15

해지 위약금 조회

강한 signal

조회 횟수 점수
1 +25
2 이상 +35

상담이벤트 -> 키워드 + 감정 분석 점수

해지 프로세스 진입

여기가 retention trigger이다.

점수는 +40으로 두고 점수보다, 액션 트리거로서

조건을 final_score >=80이고, cance 하고 + 쿠폰 발급 이력이 없으면, => retention model 작동 -> 쿠폰 발급

| | | — |

최종 score

base_score ≈ 75

realtime_score ≈ 60

final_score = min(100, base + realtime)

그리고 위약금 조회, 해지 프로세스, 상담 + 키워드 이 세개가 강한 churn signal이다.

1) 배치 점수 = 기본 위험도

주 1회 계산을 해서 base_score를 만듭니다. 여기에 들어가는 것은 상태형 신호 입니다.

2) 실시간 점수

실시간 점수는 즉시 반응해야 하는 신호로, 이벤트 발생 시 delta_score를 만든다.

여기에 들어가는 것은 행동형 신호이다.

3) 최종 점수

erd에 들어가는 점수는 final_score = min(100, base_score + realtime_delta_score)로 한다.

내부 계산은 많이 하더라도, 0-100으로 cap 자르는 과정이 되어야한다.

상담 점수는 50% 감소, 60일후 제거

-> decay 정책

2. 클릭 로그를 어떻게 정제해서 무의미한 반복 클릭을 걸러낼지

이탈률 정제 원칙

1) 동일 이벤트의 짧은 시간 중복 클릭 제거

3. 해지 위약금 조회와 실제 해지 직전 행동을 어떻게 다르게 취급할지

4. 전체 점수를 어떻게 객관적으로 만들고 100점 넘는 사용자는 어떻게 처리할지

#이탈률 로직 #가중치 #실시간 #배치