콘텐츠로 이동

hossam.my_logit

hossam.my_logit

fit_model

fit_model(data, y, summary=False)

statsmodels의 Logit을 이용해 로지스틱 회귀 모델을 적합한다.

종속변수 y를 제외한 나머지 모든 컬럼을 독립변수로 사용하며, 절편(상수항)을 자동으로 추가한 뒤 최대우도추정(MLE)으로 회귀계수를 추정한다. 종속변수는 0/1의 두 값만 가지는 이분형이어야 한다.

Parameters:

Name Type Description Default
data

독립변수와 종속변수를 모두 포함하는 데이터프레임.

required
y

종속변수로 사용할 컬럼명. data에 반드시 존재해야 하며 0/1의 이분형이어야 한다.

required
summary

True로 설정하면 적합된 모델의 요약 통계량을 출력한다. Defaults to False.

False

Returns:

Type Description

적합이 완료된 로지스틱 회귀분석 결과 객체.

predict

predict(fit, new_data, threshold=0.5)

적합된 로지스틱 모델로 새로운 데이터의 예측 확률과 예측 범주를 계산한다.

다중 로지스틱 회귀에서도 안전하게 동작하도록, 모델이 학습한 독립변수만 학습 당시의 순서 그대로 골라 사용한다. 필요 없는 컬럼이 섞여 있으면 무시하고, 학습에 사용된 독립변수가 빠져 있으면 어떤 변수가 없는지 알려 준다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
new_data

예측에 사용할 새로운 데이터. 데이터프레임, 한 건짜리 Series 또는 dict.

required
threshold float

확률을 0/1로 분류하는 임계값 (기본값: 0.5).

0.5

Returns:

Name Type Description
DataFrame

예측 확률('proba')과 예측값('pred')을 담은 데이터프레임.

Raises:

Type Description
ValueError

모델이 학습한 독립변수가 new_data에 없는 경우.

plot_sigmoid

plot_sigmoid(
    fit,
    data,
    x,
    threshold=0.5,
    palette=None,
    title=None,
    xlabel=None,
    ylabel=None,
    width=1280,
    height=640,
    save_path=None,
)

독립변수에 따른 사건 발생 확률의 S자 곡선(시그모이드)을 그린다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
data

회귀분석에 사용한 원본 데이터프레임. (독립변수와 종속변수를 모두 포함)

required
x str

곡선의 x축으로 사용할 독립변수명.

required
threshold float

확률을 0/1로 분류하는 임계값 (기본값: 0.5).

0.5
palette str

그래프 색상에 사용할 팔레트 이름. (기본값: None).

None
title str

그래프 제목 (기본값: None).

None
xlabel str

x축 레이블 (기본값: None → 독립변수명).

None
ylabel str

y축 레이블 (기본값: None → "P(종속변수=1)").

None
width int

캔버스 가로 픽셀 (기본값: 1280).

1280
height int

캔버스 세로 픽셀 (기본값: 640).

640
save_path str

이미지 저장 경로 (기본값: None).

None

report_fitness

report_fitness(fit)

적합된 로지스틱 모델의 모형 적합도(model fit) 보고 문장을 생성해 반환한다.

summary() 결과표의 문자열을 파싱하지 않고, fit 객체가 이미 갖고 있는 속성에서 지표를 직접 읽어와 문장을 구성한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required

Returns:

Name Type Description
str

모형 적합도 보고 문장. IPython.display.Markdown으로 감싸 출력하면 좋다.

report_variables

report_variables(fit, data)

적합된 로지스틱 모델의 독립변수별 회귀계수·오즈비 보고표를 데이터프레임으로 생성해 반환한다.

오즈비와 그 95% 신뢰구간을 함께 제공한다. 다중공선성 점검을 위한 VIF 계산에 원본 데이터가 필요하므로 data를 함께 받는다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
data

회귀분석에 사용한 원본 데이터프레임. 독립변수와 종속변수를 모두 포함해야 한다.

required

Returns:

Name Type Description
DataFrame

독립변수별 보고표. 종속변수·독립변수·B·표준오차·z·유의확률· 오즈비(OR)·OR 95% 신뢰구간·공차·VIF 컬럼을 가진다. |B|(=|log OR|) 내림차순으로 정렬되어 영향력이 큰 변수가 위로 온다.

report_variables_text

report_variables_text(fit, data=None, alpha=0.05)

독립변수별 오즈비 해석 문장을 markdown 불릿 리스트로 생성해 반환한다.

각 독립변수에 대해 계수(B)·오즈비(OR)·z·유의확률을 문장으로 풀어 쓰고, 오즈비를 백분율 변화로 환산하여 "오즈가 약 몇 % 증가/감소" 형태로 해석한다. data가 주어지면 이분형(더미) 변수와 연속형 변수를 구분해 해석 표현을 달리한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
data

원본 데이터프레임 (기본값: None). 주어지면 이분형/연속형을 구분해 표현한다.

None
alpha float

유의성 판정에 사용할 유의수준 (기본값: 0.05).

0.05

Returns:

Name Type Description
str

독립변수별 해석 문장 불릿 리스트. IPython.display.Markdown으로 감싸 출력하면 좋다.

plot_odds

plot_odds(
    fit,
    data,
    palette=None,
    title=None,
    xlabel=None,
    ylabel=None,
    width=1280,
    height=None,
    save_path=None,
)

오즈비(Odds Ratio)를 가로 막대그래프로 시각화해 독립변수의 영향력을 보여준다.

막대는 report_variables가 정렬해 둔 |B|(=|log OR|) 내림차순 그대로 위에서 아래로 배치되며, 오즈비가 1보다 큰지(사건 발생 오즈 증가) 작은지(감소)에 따라 색을 달리하고 막대 끝에 오즈비 값을 표기한다. OR=1(영향 없음) 위치에 기준선을 둔다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
data

독립변수와 종속변수를 모두 포함하는 데이터프레임.

required
palette dict

부호별 막대 색상. None이면 {'+': 파랑, '-': 빨강} (기본값: None).

None
title str

그래프 제목 (기본값: None).

None
xlabel str

x축 레이블 (기본값: None → "오즈비(Odds Ratio)").

None
ylabel str

y축 레이블 (기본값: None → "독립변수").

None
width int

캔버스 가로 픽셀 (기본값: 1280).

1280
height int

캔버스 세로 픽셀. None이면 독립변수 수 × 80으로 자동 계산 (기본값: None).

None
save_path str

이미지 저장 경로 (기본값: None).

None

auto_logit

auto_logit(
    data,
    y,
    report=True,
    plot=True,
    threshold=0.5,
    width=1280,
    height=640,
    backward=False,
    alpha=0.05,
)

로지스틱 회귀모델 적합부터 변수 선택·보고서 출력·시각화까지 한 번에 수행한다.

backward=True이면 유의하지 않은 독립변수가 모두 사라질 때까지 후진소거법(유의확률이 가장 큰 변수를 하나씩 제거 후 재적합)을 반복한다.

Parameters:

Name Type Description Default
data

독립변수와 종속변수를 모두 포함하는 데이터프레임.

required
y

종속변수로 사용할 컬럼명 (0/1 이분형).

required
report bool

오즈비 보고표·모형 적합도·해석 문장 출력 여부 (기본값: True).

True
plot bool

시각화 출력 여부 (기본값: True).

True
threshold float

시그모이드 곡선에 표시할 분류 임계값 (기본값: 0.5).

0.5
width int

그래프 너비 (기본값: 1280).

1280
height int

그래프 높이 (기본값: 640).

640
backward bool

후진소거법으로 유의하지 않은 독립변수를 제거할지 여부 (기본값: False).

False
alpha float

후진소거법의 변수 제거 기준이자 해석 문장의 유의수준 (기본값: 0.05).

0.05

Returns:

Type Description

적합이 완료된 로지스틱 회귀분석 결과 객체.

plot_confusion

plot_confusion(
    fit,
    threshold=0.5,
    palette=None,
    title=None,
    size=640,
    save_path=None,
    ax=None,
)

혼동행렬(Confusion Matrix)을 정사각형 히트맵으로 시각화한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
threshold float

확률을 0/1로 분류하는 임계값 (기본값: 0.5).

0.5
palette str

히트맵 색상 팔레트 이름 (기본값: None → "Blues").

None
title str

그래프 제목 (기본값: None → "혼동행렬(Confusion Matrix)").

None
size int

캔버스 한 변의 픽셀 크기. 가로·세로가 같다 (기본값: 640).

640
save_path str

이미지 저장 경로 (기본값: None).

None
ax

그래프를 그릴 Axes 객체 (기본값: None → 캔버스를 새로 생성).

None

plot_roc

plot_roc(
    fit,
    palette=None,
    title=None,
    size=640,
    save_path=None,
    ax=None,
)

ROC Curve를 정사각형으로 그리고 AUC(곡선 아래 면적)를 제목에 표시한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
palette str

곡선 색상에 사용할 팔레트 이름 (기본값: None → 파랑 단색).

None
title str

그래프 제목 (기본값: None → "ROC Curve (AUC = ...)").

None
size int

캔버스 한 변의 픽셀 크기. 가로·세로가 같다 (기본값: 640).

640
save_path str

이미지 저장 경로 (기본값: None).

None
ax

그래프를 그릴 Axes 객체 (기본값: None → 캔버스를 새로 생성).

None

report_performance

report_performance(
    fit,
    threshold=0.5,
    plot=True,
    palette=None,
    size=640,
    save_path=None,
)

적합된 로지스틱 모델의 분류 성능을 혼동행렬과 평가지표로 정리해 출력한다.

위양성률(FPR)과 특이성(TNR)은 sklearn에 함수가 없어 혼동행렬로 직접 계산한다. AUC는 구간별 판정("낮음"~"매우 우수")을, 진단오즈비는 (TP×TN)/(FP×FN)를 함께 출력한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
threshold float

확률을 0/1로 분류하는 임계값 (기본값: 0.5).

0.5
plot bool

혼동행렬 히트맵과 ROC Curve를 함께 그릴지 여부 (기본값: True).

True
palette str

그래프 색상에 사용할 팔레트 이름 (기본값: None).

None
size int

서브플롯 한 칸의 한 변 픽셀 크기 (기본값: 640).

640
save_path str

이미지 저장 경로 (기본값: None).

None

apply_recipe

apply_recipe(data, recipe)

fix_linear 이 확정한 처방을 다른 데이터프레임에 그대로 재현한다.

학습 때 사용한 중심화 평균·평행이동량을 그대로 써야 하므로, 신규 데이터를 예측할 때는 반드시 이 함수로 파생변수를 만든다.

Parameters:

Name Type Description Default
data

처방을 적용할 데이터프레임. 처방 대상 원본 컬럼을 모두 포함해야 한다.

required
recipe dict

fix_linear 이 돌려준 recipe_ 딕셔너리. {변수명: {'method': 'square'|'log', 'center': float, 'shift': float}}

required

Returns:

Name Type Description
DataFrame

파생변수가 추가되고 원본 컬럼이 제거된 데이터프레임.

Raises:

Type Description
KeyError

처방 대상 컬럼이 data 에 없는 경우.

ValueError

처방 방식이 'square'·'log' 가 아닌 경우.

test_linear

test_linear(
    fit=None,
    data=None,
    yname=None,
    xnames=None,
    targets=None,
    alpha=0.05,
)

Box-Tidwell 검정으로 연속형 독립변수의 로짓 선형성을 점검한다.

독립변수 x에 x × ln(x) 항을 하나씩 추가해 그 항이 유의한지 본다. 유의하면(p < alpha) 로짓이 직선이 아니라는 뜻이므로 변환·제곱항·구간화가 필요하다. 이분형(더미) 변수는 두 점을 잇는 선이 언제나 직선이므로 검정 대상에서 제외한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

None
data

회귀분석에 사용한 원본 데이터프레임. 독립변수와 종속변수를 모두 포함해야 한다.

None
yname str

종속변수 컬럼명.

None
xnames list

모델에 투입된 독립변수 이름 목록.

None
targets list

검정할 변수 목록. None이면 xnames 중 연속형 전체 (기본값: None).

None
alpha float

유의수준 (기본값: 0.05).

0.05

fix_linear

fix_linear(
    data,
    y,
    alpha=0.05,
    allow_shifted_log=False,
    max_rounds=None,
    report=True,
)

로짓 선형성 위배를 한 변수씩 처방하고 재검정하는 루프를 자동으로 수행한다.

Parameters:

Name Type Description Default
data

독립변수와 0/1 종속변수를 모두 포함한 데이터프레임.

required
y str

종속변수 컬럼명.

required
alpha float

유의수준 (기본값: 0.05).

0.05
allow_shifted_log bool

음수를 포함한 변수도 평행이동 후 로그 변환을 시도할지 여부. 이동량이 자의적이어서 계수 해석이 무너지므로 기본값은 False (기본값: False).

False
max_rounds int

최대 반복 횟수. None이면 연속형 독립변수 개수 (기본값: None).

None
report bool

라운드별 진행 상황과 처리 이력표를 출력할지 여부 (기본값: True).

True

Returns:

Type Description

처방이 모두 반영된 회귀분석 결과 객체. 아래 속성이 함께 붙는다. - data_ (DataFrame): 파생변수가 반영된 데이터프레임 - recipe_ (dict): 변수별 처방 내역. apply_recipe 에 그대로 넘겨 쓴다 - history_ (DataFrame): 라운드별 처리 이력표 - unresolved_ (list): 제곱항·로그변환으로도 해소되지 않은 변수 목록

Raises:

Type Description
KeyError

종속변수 컬럼이 data 에 없는 경우.

ValueError

alpha·max_rounds 가 유효하지 않은 경우.

test_independent

test_independent(fit)

Durbin-Watson으로 잔차의 독립성을 검정한다.

로지스틱 회귀는 잔차가 0/1 구조라 일반 잔차를 쓸 수 없으므로 피어슨 잔차를 사용한다. 본래 시계열 전용 검정이므로, 시간 순서가 없는 데이터에서는 통계량이 정상이어도 실제로는 독립이 아닐 수 있다. 최종 판단은 자료 수집 설계로 해야 한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required

Returns:

Name Type Description
DataFrame

Durbin-Watson 통계량과 독립성 판정을 담은 단일 행 결과표.

fit_pipeline

fit_pipeline(
    data,
    y,
    columns=None,
    *,
    outlier=False,
    recipe=None,
    encode=True,
    vif=False,
    vif_threshold=10.0,
    scale=False,
    scale_method="standard",
    backward=False,
    alpha=0.05,
    name=None,
    verbose=False
)

플래그로 지정한 전처리를 수행한 뒤 로지스틱 회귀모델을 적합한다.

Parameters:

Name Type Description Default
data DataFrame

독립변수와 0/1 종속변수를 모두 포함하는 데이터프레임.

required
y str

종속변수로 사용할 컬럼명.

required
columns list

이상치 대체 대상이 되는 원본 연속형 독립변수 목록. None이면 숫자형 독립변수를 자동 선택한다 (기본값: None).

None
outlier bool

이상치를 IQR 경계값으로 대체할지 여부 (기본값: False).

False
recipe dict

fix_linear 이 돌려준 recipe_. None이면 처방을 적용하지 않는다 (기본값: None).

None
encode bool

명목형 독립변수의 더미 인코딩 수행 여부 (기본값: True).

True
vif bool

다중공선성 제거 수행 여부 (기본값: False).

False
vif_threshold float

VIF 임계값 (기본값: 10.0).

10.0
scale bool

정규화 수행 여부 (기본값: False).

False
scale_method str

사용할 스케일러 이름 (기본값: 'standard').

'standard'
backward bool

후진소거법 수행 여부 (기본값: False).

False
alpha float

후진소거법의 변수 제거 기준 유의수준 (기본값: 0.05).

0.05
name str

모델을 구분할 이름. 결과 객체의 name_ 속성이 된다 (기본값: None).

None
verbose bool

단계별 전처리 내역 출력 여부 (기본값: False).

False

Returns:

Type Description

적합이 완료된 회귀분석 결과 객체. 아래 속성이 함께 붙는다. - data_ (DataFrame): 전처리가 끝난 데이터. report_variables 등이 사용한다 - recipe_ (dict): 적용한 로짓 선형성 처방. 신규 예측 시 apply_recipe 에 넘긴다 - name_ (str): 모델을 구분할 이름

Raises:

Type Description
KeyError

종속변수 컬럼이 data 에 없는 경우.

ValueError

결측치가 남아 있는 경우.

compare_models

compare_models(
    fits,
    metric="AUC",
    sub_metric="변수수",
    tolerance=0.05,
    threshold=0.5,
    digits=4,
    report=True,
)

여러 로지스틱 모델의 분류 성능을 한 표로 정리해 좋은 순으로 정렬하고, 최고 모델을 반환한다. 주 지표 1위와의 격차가 tolerance 이내면 '근소 격차 그룹'으로 묶어 보조 지표로 순서를 정한다.

my_ols.compare_models 와 같은 방식으로 동작하되, 회귀 지표(RMSE·R²) 대신 분류 지표(정확도·F1·AUC)와 모형 적합도 지표(Pseudo R²·AIC)로 비교한다.

Parameters:

Name Type Description Default
fits dict

{모델이름: 적합된 회귀분석 결과 객체} 형태의 딕셔너리.

required
metric str

정렬 기준이 되는 주 성능평가지표 (기본값: 'AUC').

'AUC'
sub_metric str

근소 격차 그룹 안에서 적용할 보조 지표. None이면 미사용 (기본값: '변수수').

'변수수'
tolerance float

근소 격차로 판단할 주 지표의 상대격차. 0이면 순수 크기 비교 (기본값: 0.05).

0.05
threshold float

확률을 0/1로 분류하는 임계값 (기본값: 0.5).

0.5
digits int

표에 표시할 소수점 자릿수 (기본값: 4).

4
report bool

성능 비교표를 화면에 출력할지 여부 (기본값: True).

True

Returns:

Type Description

성능이 가장 좋은 모델의 회귀분석 결과 객체(표의 첫 행). 아래 속성이 함께 붙는다. - name_ (str): 모델 이름. fits 의 키에서 채워진다 - score_table_ (DataFrame): 모델명을 인덱스로 하는 성능 비교표. 성능이 좋은 모델이 위에 오며, 맨 끝에 1위 대비 상대격차인 Gap(%) 컬럼이 붙는다

Raises:

Type Description
TypeError

fits 가 딕셔너리가 아니거나 값이 회귀분석 결과 객체가 아닌 경우.

ValueError

fits 가 비었거나 지표 이름·tolerance·threshold 가 유효하지 않은 경우.

report_threshold

report_threshold(fit, thresholds=None, digits=3)

임계값을 바꿔가며 분류 성능이 어떻게 달라지는지 한 표로 정리한다.

임계값 0.5는 관례일 뿐이므로, 정밀도와 재현율 중 무엇이 중요한지에 따라 조정한 결과를 비교해 목적에 맞는 값을 고르는 데 사용한다.

Parameters:

Name Type Description Default
fit

fit_model 함수로 적합된 회귀분석 결과 객체.

required
thresholds list

비교할 임계값 목록 (기본값: [0.3, 0.4, 0.5, 0.6, 0.7]).

None
digits int

표에 표시할 소수점 자릿수 (기본값: 3).

3
report bool

비교표를 화면에 출력할지 여부 (기본값: True).

required

Returns:

Name Type Description
DataFrame

임계값을 인덱스로 하는 성능 비교표. 정확도·정밀도·재현율·F1 과 놓친 1(FN)·잘못 잡은 0(FP) 건수를 담는다.

Raises:

Type Description
ValueError

임계값 목록이 비었거나 0~1 범위를 벗어난 값이 있는 경우.