[TIL] Python으로 AIC 비교 빠르게 하기

Hanna Kim·2020년 10월 6일
1

Python

목록 보기
2/3
post-custom-banner

단계적 회귀분석을 할 때 엑셀, 자모비에서 변수를 하나하나 끌어다가 실행하고 비교하는 건 너무 귀찮은 일이다. 모델의 AIC 값을 기준으로 비교하려고 한다면, AIC 값만 빠르게 모아서 보고 싶다.

이때 파이썬 for loop를 사용해서 간단하게 비교할 수 있다!!

중고차 데이터 '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 끝..!

profile
쌓으며 배우는 중
post-custom-banner

0개의 댓글