이상점
이상점, 레버리지, 영향점
- 이상점(outlier): 주어진 독립변수 값에서 관측된 종속변수가 모형의 예측에서 크게 벗어난 점
- 레버리지(leverage): 독립변수 공간에서 다른 관측치와 멀리 떨어진 정도
- 독립변수가 극단적일 때 커짐
- 회귀선에 미칠 수 있는 잠재적 영향력을 나타냄
- 영향점(influential point): 해당 관측치를 제외했을 때 회귀계수나 예측값이 크게 달라지는 점
높은 레버리지가 곧 이상점을 뜻하지는 않는다. 회귀선에서 멀리 떨어졌는지는 잔차로, 실제 분석 결과를 얼마나 바꾸는지는 DFFITS나 Cook 거리로 확인한다.
Python 분석 준비
네 파일을 현재 폴더에 둔 뒤 필요한 라이브러리를 불러온다.
import numpy as np
import pandas as pd
from IPython.display import display
from statsmodels.formula.api import ols
레버리지
df = pd.read_excel("influence1.xlsx")
m = ols("y ~ x", data=df).fit()
i = m.get_influence()
h = i.hat_matrix_diag
강의에서는 단순회귀모형 y ~ x의 레버리지 기준으로 다음 값을 사용한다.
th = 2 / len(df)
일반적으로 독립변수 수를 (p), 관측치 수를 (n)이라고 하면 절편을 포함한 모수는 (p+1)개이므로 기준은 ((p+1)/n)으로 나타낼 수 있다.
영향력 진단 기준
외적 스튜던트화 잔차
내적 스튜던트화 잔차(internally studentized residual)는 각 잔차를 잔차 표준편차의 추정치로 나눈 값이다.
i.resid_studentized
외적 스튜던트화 잔차(externally studentized residual)는 특정 관측치를 제외하고 계산한 삭제 잔차를 스튜던트화한 값이다. 내적 스튜던트화 잔차보다 이상점 진단에 유리하며, 보통 절댓값이 3 이상이면 이상점 후보로 점검한다.
i.resid_studentized_external
DFFITS
DFFITS는 특정 관측치를 분석에 포함했을 때와 포함하지 않았을 때의 예측값 차이를 스튜던트화한 지표다.
i.dffits
독립변수 수가 (p), 관측치 수가 (n)일 때 다음 기준을 사용한다.
∣DFFITSi∣>2n−p−1p+1Cook 거리
Cook 거리(Cook's distance)는 잔차와 레버리지를 함께 반영해 관측치가 전체 적합 결과에 미치는 영향을 나타낸다.
i.cooks_distance[0]
이는 영향점 후보를 찾는 경험적 기준이다. 기준을 넘었다고 관측치를 자동으로 삭제하지 않는다.
influence1: 기본 자료
df1 = pd.read_excel("influence1.xlsx")
m1 = ols("y ~ x", data=df1).fit()
i1 = m1.get_influence()
h1 = i1.hat_matrix_diag
student_resid1 = i1.resid_studentized_external
dffits1 = i1.dffits[0]
cooks_d1 = i1.cooks_distance[0]
n1 = int(m1.nobs)
p1 = int(m1.df_model)
leverage_cutoff1 = (p1 + 1) / n1
student_resid_cutoff = 3
dffits_cutoff1 = 2 * np.sqrt(
(p1 + 1) / (n1 - p1 - 1)
)
cooks_cutoff1 = 4 / (n1 - p1 - 1)
d1 = pd.DataFrame({
"Row": df1["Row"].astype(int),
"x": df1["x"],
"y": df1["y"],
"leverage": h1,
"student_resid": student_resid1,
"dffits": dffits1,
"cooks_d": cooks_d1,
})
d1["high_leverage"] = d1["leverage"] > leverage_cutoff1
d1["outlier"] = d1["student_resid"].abs() > student_resid_cutoff
d1["high_dffits"] = d1["dffits"].abs() > dffits_cutoff1
d1["high_cooks"] = d1["cooks_d"] > cooks_cutoff1
flag_columns = [
"high_leverage",
"outlier",
"high_dffits",
"high_cooks",
]
display(d1[d1[flag_columns].any(axis=1)])
max_index1 = d1["cooks_d"].idxmax()
m1_without = ols(
"y ~ x",
data=df1.drop(index=max_index1),
).fit()
pd.DataFrame({
"model": ["전체 자료", "최대 Cook 관측치 제외"],
"slope_x": [m1.params["x"], m1_without.params["x"]],
"R_squared": [m1.rsquared, m1_without.rsquared],
})
- 관측치 수:
20 - 최대 Cook 거리 관측치: Row
4 - Row 4의 외적 스튜던트화 잔차:
2.6299 - DFFITS:
0.9872 - Cook 거리:
0.3668 - Row 4 제외 전후 기울기:
5.1169→5.2492 - (R^2):
0.9732→0.9802
Row 4는 (|t_i|>3) 기준의 이상점은 아니지만 DFFITS와 Cook 거리 기준을 넘는다. 기본 자료 안에서도 개별 관측치가 회귀 결과에 비교적 큰 영향을 줄 수 있다.
influence2: 레버리지는 작지만 잔차가 큰 점
df2 = pd.read_excel("influence2.xlsx")
이후 회귀 모형 적합, 영향력 진단, 최대 Cook 거리 관측치 제외 비교는 influence1.xlsx와 동일한 절차로 수행한다.
추가된 Row 21은 x=4, y=40이다.
- 레버리지:
0.0510 - 외적 스튜던트화 잔차:
6.6901 - DFFITS:
1.5505 - Cook 거리:
0.3639 - Row 21 제외 전후 기울기:
5.0373→5.1169 - (R^2):
0.9101→0.9732
Row 21은 독립변수 공간의 중심에 가까워 레버리지가 작다. 그러나 회귀선에서 크게 벗어나 이상점, DFFITS, Cook 거리 기준을 모두 넘는다.
influence3: 레버리지는 크지만 잔차가 크지 않은 점
df3 = pd.read_excel("influence3.xlsx")
이후 회귀 모형 적합, 영향력 진단, 최대 Cook 거리 관측치 제외 비교는 influence1.xlsx와 동일한 절차로 수행한다.
추가된 Row 21은 x=14, y=68이다.
- 레버리지:
0.3575 - 외적 스튜던트화 잔차:
-1.6601 - DFFITS:
-1.2384 - Cook 거리:
0.7020 - Row 21 제외 전후 기울기:
4.9272→5.1169 - (R^2):
0.9774→0.9732
Row 21은 독립변수 범위에서 멀리 떨어져 레버리지가 크다. 기존 선형 추세에는 비교적 가까워 (|t_i|>3) 기준의 이상점은 아니지만 DFFITS와 Cook 거리 기준을 넘는다.
influence4: 레버리지와 잔차가 모두 큰 점
df4 = pd.read_excel("influence4.xlsx")
이후 회귀 모형 적합, 영향력 진단, 최대 Cook 거리 관측치 제외 비교는 influence1.xlsx와 동일한 절차로 수행한다.
추가된 Row 21은 x=13, y=15이다.
- 레버리지:
0.3115 - 외적 스튜던트화 잔차:
-17.0467 - DFFITS:
-11.4670 - Cook 거리:
4.0480 - Row 21 제외 전후 기울기:
3.3198→5.1169 - (R^2):
0.5519→0.9732
Row 21은 독립변수 공간에서도 멀고 회귀선에서도 크게 벗어난다. 네 진단 기준을 모두 넘으며, 제거 전후 기울기와 (R^2)가 크게 달라지는 강한 영향점이다.
네 자료 비교
| 파일 | 최대 Cook 거리 Row | 레버리지 | 외적 스튜던트화 잔차 | DFFITS | Cook 거리 | 전체 기울기 | 제외 후 기울기 |
|---|---|---|---|---|---|---|---|
influence1.xlsx |
4 | 0.1235 | 2.6299 | 0.9872 | 0.3668 | 5.1169 | 5.2492 |
influence2.xlsx |
21 | 0.0510 | 6.6901 | 1.5505 | 0.3639 | 5.0373 | 5.1169 |
influence3.xlsx |
21 | 0.3575 | -1.6601 | -1.2384 | 0.7020 | 4.9272 | 5.1169 |
influence4.xlsx |
21 | 0.3115 | -17.0467 | -11.4670 | 4.0480 | 3.3198 | 5.1169 |
이상점, 높은 레버리지점, 영향점은 서로 다른 개념이다.
influence2: 낮은 레버리지와 큰 잔차influence3: 높은 레버리지와 크지 않은 잔차influence4: 높은 레버리지와 큰 잔차
이상점 다루기
- 입력 오류는 원자료와 대조해 수정
- 모집단 이탈이나 측정·실험 오류는 객관적 근거를 확인한 뒤 제외 여부 결정
- 진단 지표만 기계적으로 적용해 삭제하지 않음
- 판단이 어려우면 전체 자료와 제외 자료의 결과를 함께 비교
- 중요한 변수 누락, 상호작용, 비선형성 때문에 잔차가 커졌는지 점검
- 제외한 관측치, 제외 근거, 분석 결과의 변화를 보고서에 명시
퀴즈
레버리지와 영향점의 차이에 대한 설명으로 가장 적절한 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.