패널데이터 분석에서 개체와 시간을 변동하기 위한 TwoWay Fixed Effect, Interactive Fixed Effects
Two-Way Fixed Effects
Definition
- 두 가지 고정 효과(Two-Way Fixed Effects) 모델은 패널 데이터 분석에서 개체와 시간에 대한 변동을 모두 통제하는 방법입니다.
- 이는 개체와 시간의 고정 효과를 모두 포함하여, 분석 대상 변수의 변동을 설명합니다.
Motivation
- 이 모델은 개체와 시간에 따른 변동을 모두 통제하여 더 정확한 분석을 가능하게 하기 위해 등장했습니다.
- 이는 특히 패널 데이터에서 개체 간의 고정된 특성과 시간에 따른 변화를 동시에 고려할 수 있습니다.
Pros
- 이질성 통제: 개체와 시간에 따른 변동을 모두 통제할 수 있습니다.
- 편향 감소: 두 차원의 고정 효과를 고려하여 모델의 편향을 줄일 수 있습니다.
- 적용 범위 넓음: 다양한 분야에서 사용될 수 있습니다.
Cons
- 복잡성 증가: 모델이 복잡해질 수 있습니다.
- 추가 데이터 필요: 더 많은 데이터가 필요합니다.
- 상호작용 효과 무시: 개체와 시간의 상호작용 효과를 고려하지 않습니다.
상호작용 고정 효과 (Interactive Fixed Effects)
Definition
- 상호작용 고정 효과(Interactive Fixed Effects) 모델은 패널 데이터 분석에서 개체와 시간의 상호작용을 고려한 방법입니다.
- 이는 두 차원의 고정 효과 외에도, 상호작용 효과를 모델링하여 복잡한 이질성을 통제합니다.
Motivation
- 이 모델은 개체와 시간 간의 상호작용이 중요한 경우 사용됩니다. 두 차원의 복잡한 이질성을 통제하고자 할 때 유용합니다.
Pros
- 상호작용 효과 반영: 상호작용을 고려할 수 있습니다.
- 더 나은 모델링: 복잡한 이질성을 더 잘 모델링할 수 있습니다.
- 편향 감소: 상호작용 효과를 고려하여 모델의 편향을 줄일 수 있습니다.
Cons
- 복잡성 증가: 모델이 더욱 복잡해집니다.
- 계산 비용 증가: 더 많은 계산이 필요합니다.
- 추가 데이터 필요: 상호작용을 추정하기 위해 더 많은 데이터가 필요합니다.
Alternatives
- Random Effects 모델: 고정 효과 대신 랜덤 효과를 사용하여 개체 간의 변동을 모델링합니다.
- Hierarchical Linear 모델: 계층적 구조를 고려하여 변동을 모델링합니다.
- Difference-in-Differences: 두 그룹 간의 차이를 비교하여 정책 효과를 추정합니다.
샘플 코드
C(campaign)
는 범주형 변수로서 각 캠페인에 대한 고유한 효과를 모델에 포함하는 역할
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# 데이터 생성
np.random.seed(42)
n_campaigns = 10 # 캠페인 수
t_weeks = 12 # 주 수
df = pd.DataFrame({
'campaign': np.repeat(np.arange(n_campaigns), t_weeks),
'week': np.tile(np.arange(t_weeks), n_campaigns),
'spend': np.random.rand(n_campaigns * t_weeks) * 1000 # 광고비 지출
})
# 캠페인 및 시간 고정 효과 추가
df['campaign_effect'] = np.repeat(np.random.randn(n_campaigns), t_weeks)
df['week_effect'] = np.tile(np.random.randn(t_weeks), n_campaigns)
df['sales'] = 100 + df['campaign_effect'] + df['week_effect'] + 0.5 * df['spend'] + np.random.randn(n_campaigns * t_weeks) * 10
print(df.head())
# Two-Way Fixed Effects 모델 적합
model = smf.ols('sales ~ spend + C(campaign) + C(week)', data=df).fit() print(model.summary())
# 상호작용 항 추가
df['interaction'] = df['campaign'] * df['week']
# Interactive Fixed Effects 모델 적합
model_interactive = smf.ols('sales ~ spend + C(campaign) + C(week) + interaction', data=df).fit()
print(model_interactive.summary())