< * DataFrame 에서 그룹별 회귀분석하기 * >
◆ 파이썬에서 그룹별 회귀분석을 수행하려면, pandas로 데이터를 그룹화하고,
statsmodels 또는 sklearn 라이브러리를 사용하여 각 그룹에 대해 회귀 모델을 개별적으로
학습시키는 방식으로 구현할 수 있다.
1. 필요한 라이브러리 설치
pip install pandas statsmodels scikit-learn
2. 데이터 준비
______< 예시 : 데이터를 생성 >_____________________________________
import pandas as pd
import numpy as np
# 샘플 데이터 생성
data = pd.DataFrame({
'Group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'X': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'Y': [2, 4, 6, 1, 2, 3, 3, 6, 9]
})
print(data)
------------------------------------------------------------------------------
데이터 출력 :
Group X Y
0 A 1 2
1 A 2 4
2 A 3 6
3 B 1 1
4 B 2 2
5 B 3 3
6 C 1 3
7 C 2 6
8 C 3 9
3. 그룹별 회귀분석 수행
(1) statsmodels 사용
statsmodels는 회귀분석 결과를 해석하기에 적합한 통계 요약을 제공한다.
______________________________________________________________________________
import statsmodels.api as sm
# 그룹별 회귀분석
grouped = data.groupby('Group')
results = {}
for name, group in grouped:
X = group['X']
Y = group['Y']
# X에 상수 추가 (절편 포함)
X = sm.add_constant(X)
# 회귀분석 수행
model = sm.OLS(Y, X).fit()
results[name] = model
# 결과 요약 출력
for group, model in results.items():
print(f"Group {group} Regression Summary:")
print(model.summary())
print("\n")
------------------------------------------------------------------------
출력 예시
Group A Regression Summary:
OLS Regression Results
==============================================================================
Dep. Variable: Y R-squared: 1.000
Model: OLS Adj. R-squared: 1.000
...
Group B Regression Summary:
OLS Regression Results
==============================================================================
Dep. Variable: Y R-squared: 1.000
Model: OLS Adj. R-squared: 1.000
...
Group C Regression Summary:
OLS Regression Results
==============================================================================
Dep. Variable: Y R-squared: 1.000
Model: OLS Adj. R-squared: 1.000
...
(2) sklearn 사용
sklearn은 회귀 모델을 학습시키고 예측하는 데 적합하다.
____________________________________________________________________________________
from sklearn.linear_model import LinearRegression
# 그룹별 회귀분석
grouped = data.groupby('Group')
models = {}
for name, group in grouped:
X = group[['X']].values # sklearn에서는 2D 배열이 필요
Y = group['Y'].values
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, Y)
models[name] = model
# 회귀 계수 및 절편 출력
print(f"Group {name} Coefficients: {model.coef_[0]}, Intercept: {model.intercept_}")
--------------------------------------------------------------------------------------------------
출력 예시
Group A Coefficients: 2.0, Intercept: 0.0
Group B Coefficients: 1.0, Intercept: 0.0
Group C Coefficients: 3.0, Intercept: 0.0
4. 그룹별 회귀 결과 저장
결과를 데이터프레임으로 저장하여 한눈에 확인할 수 있다.
_________________________________________________________________________________
results_df = pd.DataFrame([
{'Group': name, 'Coefficient': model.coef_[0], 'Intercept': model.intercept_}
for name, model in models.items()
])
print(results_df)
--------------------------------------------------------------------------------------------
출력 :
Group Coefficient Intercept
0 A 2.0 0.0
1 B 1.0 0.0
2 C 3.0 0.0
5. 그룹별 회귀 결과 시각화
_____________________________________________________________________
import matplotlib.pyplot as plt
# 그룹별 회귀 결과 시각화
for name, group in grouped:
X = group['X']
Y = group['Y']
# 회귀선
pred_Y = models[name].predict(X.values.reshape(-1, 1))
# 산점도 및 회귀선
plt.scatter(X, Y, label=f"Group {name}")
plt.plot(X, pred_Y, label=f"Regression Line {name}")
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.title('Group-wise Regression')
plt.show()
--------------------------------------------------------------------------