단계적 회귀분석을 할 때 엑셀, 자모비에서 변수를 하나하나 끌어다가 실행하고 비교하는 건 너무 귀찮은 일이다. 모델의 AIC 값을 기준으로 비교하려고 한다면, AIC 값만 빠르게 모아서 보고 싶다.
중고차 데이터 'mileage', 'model', 'year', 'my_car_damage','other_car_damage'로 'price'에 대한 분석을 해보자.
일단 전진선택으로 접근해보면:
result = []
for x in ['mileage', 'model', 'year', 'my_car_damage','other_car_damage']:
formula = f"price ~ {x}"
res = ols(formula, data = used).fit()
result.append((res.aic, formula))
결과에서 AIC가 가장 작은 걸 선택하면 된다!
min(result)
결과로 year가 선택됐다면 year를을 포함한 변수 두개로 회귀분석을 진행해보자.
result = []
for y in ['mileage', 'model', 'my_car_damage','other_car_damage']:
formula = f"price ~ year + {y}"
res = ols(formula, data = used).fit()
result.append((res.aic, formula))
year를 제외하고, 회귀 변수로 year를 추가한 것 빼곤 모두 위와 동일하다.
result = []
whole = ['mileage', 'model', 'year', 'my_car_damage','other_car_damage']
for x in whole:
shole = list(set(whole) - set(x))
for y in shole:
formula = f"price ~ {x} + {y}"
res = ols(formula, data = used).fit()
result.append((res.aic, formula))
일단 for loop를 두 번 써서 만들어봤다. x에서 선택된 변수는 다음 리스트에서 제외한 채로 y를 뽑는다. 그렇게 중복 없이 변수를 뽑을 수 있다.
x, y를 한 번에 선택하면 편할 것 같아서 아래와 같이 해봤는데, 오류가 떴다!
result = []
for x,y in ['mileage', 'model', 'year', 'my_car_damage','other_car_damage']:
formula = f"price ~ {x} + {y}"
res = ols(formula, data = used).fit()
result.append((res.aic, formula))
too many values to unpack
이라는데, 이유를 모르겠다. (이 부분 탐구는 다음에...)
permutation을 만드는 것도 가능할 것 같아서 찾아봤는데, (변수, 변수) 형식으로 뽑히기 때문에 그걸 <변수 + 변수> 형식으로 어떻게 바꿔서 식에 넣을지 모르겠다. (이것도 다음에..)
또 의문만 남은 TIL 끝..!