회귀분석 응용 복습
예지보전 자료로 모형 선택, 잔차, 이상점, 변수 변형, 상호작용과 이중차분법을 복습
📁 실습 파일 다운로드: predictive_maintenance.xlsx
- 실제 공장 자료가 아닌 수업용 합성 예지보전 자료 1,280건
- 한 행은 한 생산라인의 한 교대 근무일 기록
- 8개 생산라인을 16주 동안 관찰하고, 9주차부터 처리 라인 4곳에 예지보전 시스템 도입
- 단순회귀에서 시작해 모형 선택, 잔차와 영향점, 변수 변형과 제곱항을 차례로 점검
- 마지막에 야간 교대와 진동의 상호작용 및 예지보전 도입의 이중차분 효과 추정
| 컬럼 | 설명 |
|---|---|
record_id |
관측 기록 ID |
date |
근무일 |
week |
관찰 주차(1~16주) |
line_id |
생산라인 ID(L01~L08) |
treated |
예지보전 도입 라인은 1, 비교 라인은 0 |
post |
도입 후인 9~16주차는 1, 도입 전은 0 |
shift |
교대(Day, Night) |
night |
야간 교대는 1, 주간 교대는 0 |
machine_age_years |
설비 연식(년) |
hours_since_maintenance |
최근 정비 후 누적가동시간 |
production_load_pct |
생산부하(%) |
temperature_c |
온도(°C) |
humidity_pct |
습도(%) |
vibration_rms |
진동 RMS |
downtime_min |
비가동시간(분) |
import pandas as pd
df = pd.read_excel("predictive_maintenance.xlsx")
df.head()
퀴즈
downtime_min ~ vibration_rms 단순회귀모형 simple_model에서 vibration_rms의 계수를 소수점 넷째 자리까지 입력하세요.
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.
downtime_min ~ vibration_rms 단순회귀모형 simple_model에서 vibration_rms의 계수를 소수점 넷째 자리까지 입력하세요.
from statsmodels.formula.api import ols
simple_model = ols(
'downtime_min ~ vibration_rms',
data=df,
).fit()
simple_model.summary()
vibration_rms 행의 coef를 확인하세요.
단순회귀의 vibration_rms 계수가 15.0377일 때 가장 적절한 해석은?
회귀계수는 독립변수가 1단위 변할 때 종속변수의 예측값이 얼마나 달라지는지를 나타냅니다. 관찰자료의 회귀계수와 인과효과도 구분하세요.
downtime_min ~ vibration_rms + production_load_pct + machine_age_years + night 다중회귀모형 multiple_model의 수정 결정계수를 요약표에 표시된 소수점 셋째 자리까지 입력하세요.
multiple_model = ols(
'downtime_min ~ vibration_rms + production_load_pct '
'+ machine_age_years + night',
data=df,
).fit()
multiple_model.summary()
요약표 위쪽의 Adj. R-squared를 확인하세요.
앞에서 적합한 단순회귀모형 simple_model과 다중회귀모형 multiple_model을 수정 결정계수, AIC, BIC로 비교할 때 가장 적절한 선택은?
simple_model.summary()
multiple_model.summary()
두 요약표에서 Adj. R-squared, AIC, BIC를 비교하세요. 수정 결정계수는 클수록, AIC와 BIC는 작을수록 좋습니다.
simple: 수정 결정계수가 가장 작지만 변수가 가장 적으므로 항상 선택한다multiple: 수정 결정계수가 가장 크고 AIC와 BIC가 가장 작다simple: AIC와 BIC가 더 작으므로 수정 결정계수와 관계없이 선택한다두 모형은 독립변수 수가 다르므로 수정 결정계수, AIC, BIC로 비교할 수 없다multiple: 수정 결정계수가 가장 크고 AIC와 BIC가 가장 작다회귀모형 선택 기준에 대한 설명으로 맞는 것을 모두 고르세요.
수정 결정계수에는 변수 수에 대한 조정이 들어갑니다. AIC와 BIC는 작은 값을 선호합니다.
선택한 다중회귀모형 잔차의 왜도를 소수점 넷째 자리까지 입력하세요.
import scipy as sp
residuals = multiple_model.resid
sp.stats.skew(residuals)
잔차 왜도 0.7250과 잔차 그래프를 함께 본 해석으로 가장 적절한 것은?
양의 왜도는 오른쪽 꼬리가 더 길다는 뜻입니다. 잔차의 중심, 꼬리와 극단값을 함께 확인하세요.
앞에서 적합한 multiple_model 잔차의 Durbin-Watson 통계량을 요약표에 표시된 소수점 셋째 자리까지 입력하세요.
multiple_model.summary()
요약표의 Durbin-Watson 값을 확인하세요.
잔차의 시차 1 ACF가 0.4631, Durbin-Watson 통계량이 1.074일 때 가장 적절한 설명은?
ACF와 Durbin-Watson은 관측값의 순서에 의미가 있을 때 해석합니다. d<2는 양의 자기상관 방향입니다.
0.4631은 시차 0의 값이다외적 스튜던트화 잔차를 출력했을 때 맨 처음 값을 소수점 넷째 자리까지 입력하세요.
i = multiple_model.get_influence()
i.resid_studentized_external
출력된 배열의 맨 처음 값을 확인하세요.
Cook 거리를 출력했을 때 맨 처음 값을 소수점 여섯째 자리까지 입력하세요.
i.cooks_distance[0]
출력된 Cook 거리 배열의 맨 처음 값을 확인하세요.
이상점과 영향점의 처리 원칙으로 적절한 것을 모두 고르세요.
진단값은 조사할 관측치를 찾는 기준입니다. 삭제 여부는 원자료와 맥락을 확인하고, 판단이 어려우면 민감도 비교를 통해 결정합니다.
downtime_min ~ hours_since_maintenance 단순회귀모형에서 독립변수를 원자료, 로그, Box-Cox로 각각 변형해 비교했다. 이 중 결정계수가 가장 크고 AIC가 가장 작은 모형은?
import numpy as np
from scipy.stats import boxcox
maintenance_raw_model = ols(
'downtime_min ~ hours_since_maintenance',
data=df,
).fit()
maintenance_log_model = ols(
'downtime_min ~ np.log(hours_since_maintenance)',
data=df,
).fit()
df['maintenance_hours_tr'], lambd = boxcox(
df['hours_since_maintenance']
)
maintenance_boxcox_model = ols(
'downtime_min ~ maintenance_hours_tr',
data=df,
).fit()
maintenance_raw_model.summary()
maintenance_log_model.summary()
maintenance_boxcox_model.summary()
세 요약표의 R-squared와 AIC를 비교하세요.
statsmodels의 회귀식에서 I()를 사용하는 주된 이유는?
회귀식의 +, *, **는 특별한 의미를 가질 수 있습니다. I()는 괄호 안을 일반 산술식으로 처리합니다.
생산부하의 1차항과 2차항을 함께 포함하는 회귀식은?
각 후보식의 우변에 production_load_pct와 I(production_load_pct ** 2)가 모두 포함되어 있는지 확인하세요.
downtime_min ~ production_load_pctdowntime_min ~ I(production_load_pct ** 2)downtime_min ~ production_load_pct + I(production_load_pct ** 2)downtime_min ~ production_load_pct:production_load_pctdowntime_min ~ production_load_pct + I(production_load_pct ** 2)treated는 예지보전 도입 라인 여부, post는 도입 후 시점 여부이다. 두 집단의 도입 전후 변화량 차이로 downtime_min의 이중차분값을 추정하는 회귀식은?
집단 차이, 시점 차이와 두 더미변수가 동시에 1일 때의 추가 변화를 모두 모형에 포함하세요.
downtime_min ~ treated + postdowntime_min ~ treated:postdowntime_min ~ treated + post + treated:postdowntime_min ~ treated + post + line_iddowntime_min ~ treated + post + treated:post이중차분 회귀모형을 적합하고 treated:post의 계수를 소수점 넷째 자리까지 입력하세요.
did_model = ols(
'downtime_min ~ treated + post + treated:post',
data=df,
).fit()
did_model.summary()
treated:post 행의 coef를 확인하세요.
이중차분 회귀모형에서 treated:post=-7.0278, p<0.001, 95% 신뢰구간이 [-8.915, -5.141]일 때 가장 적절한 해석은?
교호작용 계수는 처리 라인의 전후 변화에서 비교 라인의 전후 변화를 뺀 값입니다. 통계적 유의성과 인과적 식별 가정은 구분하세요.