본문 바로가기
Study history/ADP 실기 합격 기록

ADP) 파이썬으로 푸는 ADP실기 데이터 분석전문가 모의고사 1회-(2)

by 성실한 나무 2022. 1. 20.

『ADP 실기 데이터 분석 전문가』  모의고사 1회_통계분석

Q1) FIFA데이터에서 각 선수의 키는 Heghit변수에 피트와 인치로 입력되어 있습니다. 이를 cm로 변환하여 새로운 변수 Height_cm을 생성하시오. ( “ ' ” 앞의 숫자는 피트이며, “ ' ” 뒤의 숫자는 인치, 1피트 = 30cm, 1인치 = 2.5cm)

파이썬 인치와 피트를 센티미터로 변환

df['Height']에 있는 값들은 데이터타입이 object로서 5'7의 형태로 되어 있다. 5'7은 5피트 7인치라는 의미이다. 이에 df['Height']에 lambda식을 사용하여 5'7 이라는 값을 '을 기준으로 split하여 분리하면 나오는 첫번째 값(인덱스[0])은 피트이고 두번째 값(인덱스[1])은 인치이다. 이에 각각을 int()함수를 통해 숫자로 변환한 후 30과 2.5를 곱하여 센티미터 단위로 바꿔 합하였다. 이 값을 df의 Height_cm이라는 column에 채워넣었다.

 

 

Q2) 포지션을 의미하는 Position변수를 아래 표를 참고하여 “Forward”, “Midfielder”, “Defender”, “GoalKeeper”로 재범주화하고, factor형으로 변환하여 Position_Class 라는 변수를 생성하고 저장하시오.

파이썬 factor형 변환

 df에서 Position이 리스트 내 해당하는 값일 경우의 인덱스를 Forward, Midfielder, Defender, GoalKeeper 별로 추렸다. 그리고 각 인덱스에 해당하는 row의 Position_Class라는 column 위치에 재범주화한 값을 입력했다.

 그 다음 Position_Class라는 column을 astype함수로 category화 하였다. (category = factor)

 

Q3) 새로 생성한 Position_Class 변수의 각 범주에 따른 Value(선수의 시장가치)의 평균값의 차이를 비교하는 일원배치 분산분석을 수행하고 결과를 해석하시오. 그리고 평균값의 차이가 통계적으로 유의하다면 사후검정을 수행하고 설명하시오.

정규성, 등분산성 검정

 

 일원배치분산분석을 하기 위한 가정은 데이터의 정규성, 등분산성, 독립성이다. 데이터는 위와 같이 정규성과 등분산성을 만족하지 않고 있었다. 하지만 일단 가정들을 만족한다고 보고 아래와 같이 일원분산분석을 실시하였다.

 일원분산분석은 statsmodels package의 anova_lm과 ols 클래스를 사용하면 간편하게 구할 수 있다. 아노바 테이블에 의하면 F통계량의 p-value가 유의수준인 0.05보다 낮으므로 level들 중 적어도 한 쌍의 Value 평균에 유의미한 차이가 있다고 해석할 수 있다.

python 일원분산분석 및 사후분석

 일원분산분석으로 적어도 한쌍의 평균이 유의미한 차이를 갖는 것을 확인했다면, 그들이 어떤 쌍들인지를 확인해야 하는데 이를 사후 분석이라고 한다. 사후분석 방법은 데이터 형태에 따라 적용할 수 있는 여러가지 방법들이 있지만, 여기서는 일반적으로 많이 사용하는 tukey HSD 방법을 적용하였다. statsmodels의 pairwise_tukeyhsd를 아래와 같이 사용할 수 있다.

pairwise_tukeyhsd(df['Value'], df['Position_Class']).summary()  

 짝 지어진 수준들끼리의 Value값을 비교했을 때 두 수준의 평균 차이를 meandiff, 이 값의 유의확률은 p-adj, lower와 upper는 평균 차이의 신뢰구간으로서 이 신뢰구간 사이에 0을 포함할 경우 reject가 False로 나타난다. reject가 False인 행(Forward-Midfielder)은 평균 차이가 유의미하지 않은 쌍이라는 의미이다. 즉, 해당 행을 제외한 나머지 행들은 모두 평균값에 유의미한 차이가 있으며 이를 위와 같이 그래프로 표시할 수 있다. Tukey HSD 사후분석 결과, 평균 차이가 유의미하지 않은 것으로 나타난 Midfielder와 Forward 직선의 경우 값이 상당부분 겹쳐 있는 것을 확인할 수 있다.

 

 

Q4) Preferred Foot(주로 사용하는 발)과 Position_Class(재범주화 된 포지션)변수에 따라 Value(이적료)의 차이가 있는지를 알아보기 위해 이원배치분산분석을 수행하고 결과를 해석하시오.

파이썬 이원분산분석 아노바테이블

이원배치분산분석을 실행하는 코드는 위와 같다. formula는 종속변수 ~ 독립변수1 * 독립변수2이다. 이원분산분석 결과 Preferred_Foot:Position_Class의 F통계량의 p-value가 유의수준 0.05보다 낮으므로 통계적으로 유의한 평균 차이가 있다고 해석할 수 있다. 주효과들도 통계적으로 유의한 것으로 나왔지만, 상호작용(교호작용)이 있는 경우에는 주효과는 의미가 없다고 한다.

 그래서 상호작용을 확인하기 위해 각 group 별로 평균 차이를 확인해보는 사후분석을 실시하였다. 결과는 아래와 같이 평균 차이가 유의미한 경우(True)와 아닌 경우를 확인할 수 있었다.

파이썬 이원분산분석 사후분석

 

 

Q5)Age, Overall, Wage, Height_cm, Weight_lb 가 Value에 영향을 미치는지 알아보는 회귀분석을 단계적 선택법을 사용하여 수행하고 결과를 해석하시오.

 단계적 선택법은 파이썬보다 R코드가 훨씬 쉽다. 단계적 선택법 패키지가 없기 때문에 직접 함수를 정의해야 하기 때문이다. 참고로 R은 step함수를 써서 아래와 같이 입력하면 된다.

step(lm(Value~1, data=fifa), scope=list(lower=~1, upper=~Age + Overall + Wage + Height_cm + Weight_lb), direction="both") 
fifa.lm <- lm(Value ~ Wage + Overall + Age + Height_cm, data = fifa)
summary(fifa.lm)

 파이썬에서는 단계적 선택법에 대해 정의해 놓은 여러 함수들이 있다. (구글링 필요!) 나는 R로 단계적 선택법에 의해 선택된 feature를 확인한 후, 해당 feature들로 아래와 같이 회귀분석을 진행하였다. 회귀분석 전에는 Scikit Learn의 StandardScaler로 변수들을 스케일링한 후 분석을 진행했다. 변수들의 값이 단위가 차이가 많이 나기 때문에 coefficient에 왜곡이 생길 수 있기 때문이다.

 

 


 

『ADP 실기 데이터 분석 전문가』 참고자료실, http://www.dataedu.kr/data/adpbook_data.php

댓글