콘텐츠로 이동

Binning Table과 WoE 변환

3.1 Binning Table — 결과 분석

optb.fit(X["utilization_rate"], y)
table = optb.binning_table.build()
print(table)

출력 예시:

  Bin              Count  Count (%)  Non-event  Event  Event rate     WoE       IV
  (-inf, 20.0)     1,850    18.5%      1,550    300     16.2%     -0.712   0.1153
  [20.0, 40.0)     2,100    21.0%      1,820    280     13.3%     -0.385   0.0342
  [40.0, 60.0)     2,350    23.5%      2,150    200      8.5%      0.098   0.0023
  [60.0, 80.0)     2,200    22.0%      2,100    100      4.5%      0.743   0.1050
  [80.0, inf)      1,500    15.0%      1,480     20      1.3%      1.452   0.2147
  Special              0     0.0%          0      0      0.0%        —        —
  Missing              0     0.0%          0      0      0.0%        —        —
  Totals          10,000   100.0%      9,100    900      9.0%        —    0.4715

사후 통계 검정

optb.binning_table.analysis(pvalue_test="chi2")
검정 방식 pvalue_test 용도
카이제곱 "chi2" 인접 Bin 간 Good/Bad 분포 차이 검정 (기본)
Fisher 정확 검정 "fisher" 소표본에서 카이제곱 대안

출력에는 인접 Bin 쌍별 p-value가 포함되어, 모든 인접 쌍이 p < 0.05인지 한눈에 확인할 수 있다.


3.2 WoE 변환 — transform()

Binning이 완료되면 원본 데이터를 WoE 값으로 치환하여 로지스틱 회귀의 입력으로 사용한다.

# WoE 변환 (기본)
X_woe = optb.transform(X["utilization_rate"], metric="woe")

# 다른 변환 옵션
X_event_rate = optb.transform(X["utilization_rate"], metric="event_rate")
X_indices    = optb.transform(X["utilization_rate"], metric="indices")
X_bins       = optb.transform(X["utilization_rate"], metric="bins")
metric 반환값 용도
"woe" 각 관측치의 WoE 값 로지스틱 회귀 입력 (기본)
"event_rate" 소속 Bin의 Event Rate EDA, 시각화
"indices" 0부터 시작하는 Bin 인덱스 프로그래밍 용도
"bins" Bin 라벨 문자열 (예: "(-inf, 25.5]") 리포팅

Special/Missing 변환 제어

X_woe = optb.transform(
    X["utilization_rate"],
    metric="woe",
    metric_special=0,    # Special Bin의 WoE (기본 0 = 중립)
    metric_missing=0,    # Missing Bin의 WoE (기본 0 = 중립)
)