Im between cherry

[데이터분석/통계/pandas] 야매 데이터와 놀자 본문

데이터분석/통계분석

[데이터분석/통계/pandas] 야매 데이터와 놀자

meal 2020. 10. 9. 02:00

야매 데이터를 만들어서 쉽고 재밌게 python으로 회귀분석을 해보았다.

어렵게만 느껴졌던 통계와 pandas로 데이터분석하는 법까지 자연스럽게 익힐 수 있어서 너무 재밌었다.

이제 다같이 매데이터와 아보

 

야놀자 1) 어떤 카페가 좋은 카페일까?

카페를 20가지 정도 나열한 다음 '좋은 카페'를 판단할 수 있는 요인을 생각해보았다.

우리는 '빵,케잌의 맛, 커피맛, 콘센트 적합도, 화장실 퀄리티, 공부분위기, 접근성, 가격'에 1점~5점까지의 점수를 매기고 '선호도'에 어떤 영향을 줄지 (야매로)분석해보려 했다.

 

 

우선, pandas가 실행될 수 있도록 환경을 세팅해보자!

(Anaconda에서 jupyternotebook을 실행하여 진행하였다.)

#pandas를 불러들인다. 이때 pd라는 별명을 붙인다.
import pandas as pd

pandas를 불러왔으니 데이터파일을 불러와보자.

*이때, 데이터파일은 jupyternotebook이 실행되고 있는 레퍼지토리와 동일한 곳에 있어야 한다!

*처음 엑셀을 작성할 때 변수 이름을 한글로 지정해줬는데, 영어로 지정할 때와 마찬가지로 단어사이엔 '_'로 연결시켜줘야 한다. 변수이름에 괄호도 있으면 안된다. 나는 한글로 설정하면 안되는줄 알고 영어로 다바꿔줬다..ㅎ

#야매 데이터 파일을 연다.
df_ya=pd.read_excel('야매 데이터.xlsx')
#데이터를 잘 불러왔는지 앞부분을 확인한다.
df_ya.head()

 

이제 회귀분석 함수를 불러와서 회귀분석을 하면된다.

다중회귀분석이므로 독립변수 들은 '+'로 연결해준다.

#ols회귀분석 함수를 불러들인다.
from statsmodels.formula.api import ols
#다중회귀분석 시에는 ols('종속변수 ~ 독립변수 + 독립변수 + .. 독립변수, ) 이런식으로 넣어주면 된다.
ols('like ~ bread_taste + coffee_taste + socket_env + study + price', data=df_ya).fit().summary()

더보기

# OLS Regression Results 읽는법

- R squared: 오차를 줄인 정도! (ex. 위에서는 0.223이기 때문에 오차를 22.3% 줄였다!)

- Adjusted R squared: 독립변수가 많아지면 무조건 R제곱은 커짐. 따라서 모델을 다른 모델과 비교해봐야 하는데 이때는 수정 R제곱 확인.

- F-statistic: prob(F stat) < 유의수준이면 (독립변수가 2개 이상일 때) 적어도 하나 이상의 기울기는 0이 아님을 의미.

- intercept: 절편

독립변수에 여러가지를 뺏다 넣었다 하며 Adj.R-Squared가 어떻게 변하는지 보고 어떤 독립변수가 들어갔을 때 Adj.R-Squared가 가장 큰지 확인하면 선호도를 판단할 수 있다.

우리의 야매데이터를 통해 분석한 결과는

 

- 접근성이 높을수록 선호도는 낮아진다 (와이??? 신기한 결과다)

- 공부분위기, 콘센트 적합도는 선호도에 큰 영향을 주지 않는다 (말도안돼..!)

- 가성비가 카페 선호도에 큰 영향을 준다 (이건 인정) 

 

더보기

#막간, 회귀분석 요점정리

1. 선형회귀분석: 종속 = 가중치(기울기) * 독립 + 절편 -> 독립이 0이면, 종속변수=절편!

2. 가중치(기울기): +인지 -인지 확인 -> 신뢰구간이 +~+이면 독립변수와 종속변수가 상관이 있다(우상향 그래프), 신뢰구간이 -~-이면 독립변수와 종속변수가 상관이 없다(우하향 그래프)

3. R squared는 예측의 정확도를 확인하는 것! -> R제곱이 1이면 100% 예측 한 것! 오차가 없다는 것을 의미함.

4. 모형끼리 비교할 땐 Adj R squared, AIC, BIC 확인! -> Adj R squared는 클수록, AIC, BIC는 작을수록 좋다.

 

#자동으로 예측치 뽑아주는 코드

res = ols('risk ~ length + horsepower + city_mpg + doors', data=df).fit()
res.summary()
res.predict(df)
new_df = pd.read_excel('새차.xlsx')
res.predict(new_df)

 

야놀자 2) 어떤 상황에서 학습이 잘 될까?

첫번째 야놀자 프로젝트보다 나은 분석을 위해, 객관적 변수를 지양하고 주관적 변수를 이용하려 했다!

갓재명님께서 객관적 변수(ex. 단맛, 향, 식감 등)를 이용하면 회귀분석이 제대로 안나온다며 꿀팁을 주셨다.

그래서 우리는 서로의 구체적 경험을 공유하고, 변수의 키워드를 모아 그룹화하였다. 

 

 

야놀자 2에서는 변수를 변형해서 회귀분석까지 돌려보려 했으나 그러진 못했다.

하지만, 분석에 앞서 변수를 어떻게 설정해야하는지 고민해보며 이의 중요성을 깨닫게 해줘서 매우 유익했다!

(사실 야놀자 프로젝트는 데이터 자체가 야매이기 때문에.. 결과보단 과정이 중요하다.)

아직 통계 개념이 어렵고 익숙하지 않지만, 이런식으로 통계와 친해지려 노력해야겠다!

통계야야야야놀자

Comments