티스토리 뷰

반응형

회귀선을 포함한 산점도 그래프

 

수치형 데이터인 온도, 체감 온도, 풍속, 습도별 대여 수량을 그린다.

 

회귀선을 포함한 산점도 그래프는 수치형 데이터 간 상관관계를 파악하는 데 사용

# 스텝 1 : m행 n열 Figure 준비
mpl.rc('font', size=15)
figure, axes = plt.subplots(nrows=2, ncols=2) # 2행 2열
plt.tight_layout()
figure.set_size_inches(7, 6)

# 스텝 2 : 서브플롯 할당
# 온도, 체감 온도, 풍속, 습도 별 대여 수량 산점도 그래프
sns.regplot(x='temp', y='count', data=train, ax=axes[0, 0],
            scatter_kws={'alpha': 0.2}, line_kws={'color': 'blue'})
sns.regplot(x='atemp', y='count', data=train, ax=axes[0, 1],
            scatter_kws={'alpha': 0.2}, line_kws={'color': 'blue'})
sns.regplot(x='windspeed', y='count', data=train, ax=axes[1, 0],
            scatter_kws={'alpha': 0.2}, line_kws={'color': 'blue'})
sns.regplot(x='humidity', y='count', data=train, ax=axes[1, 1],
            scatter_kws={'alpha': 0.2}, line_kws={'color': 'blue'});

 

scatter_kws={'alpha' : 0.20}는 산점도 그래프에 찍히는 점의 투명도. 0이면 완전 투명해서 안보인다.

line_kws= {'color' : blue}는 회귀선의 색상

 

온도와 체감 온도가 높을수록 대여수량이 많다.

습도는 낮을수록 대여가 많다.

풍속이 셀수록 대여 수량이 많다? -> windspeed 피처에 결측값이 많기 때문이다. (0인 값들이 많다.)

결측값이 많아서 그래프만으로 풍속과 대여 수량의 상관관계를 파악하기는 힘들다.

 

결측값이 많다면, 데이터를 적절히 처리해야 한다. 결측값을 다른 값으로 대체하거나 windspeed 피처 자체를 삭제

 

히트맵

temp,atemp,humidity,windspeed,count는 수치형 데이터

데이터끼리 어떤 상관관계가 있는지 알아보기 위해, corr() 함수 사용

corr() 함수는 피쳐 간 상관계수 계산

train[['temp', 'atemp', 'humidity', 'windspeed', 'count']].corr()

 

 

그런데 이것 만으로는 어느 피처들의 관계가 깊은지 눈에 들어오지 않는다.

그래서, 히트맵 함수를 그린다.

# 피처 간 상관관계 매트릭스 ①
corrMat = train[['temp', 'atemp', 'humidity', 'windspeed', 'count']].corr()
fig, ax= plt.subplots()
fig.set_size_inches(10, 10)
sns.heatmap(corrMat, annot=True) # 상관관계 히트맵 그리기 ②
ax.set(title='Heatmap of Numerical Data');

 

annot 파라미터를 true로 설정하면 상관계수가 숫자로 표시된다.

 

온도와 수량 상관계수 = 0.39

온도가 높을수록 대여수량이 많다.

반면, 습도와 대여 수량은 음수, 즉, 습도가 '낮을수록' 대여 수량이 많다.

 

풍속과 대여 수량의 상관계수는 0.1. 상관관계가 매우 약하다. 별 도움을 주지 못한다.

 

분석 정리 및 모델링 전략

 

1. 타깃값 변환 : 분포도 확인 결과 타깃값인 count가 0 근처로 치우쳐 있으므로 로그변환하여 정규분포에 가깝게 만들어야 한다.

이 후에 지수변환해 count로 복원

 

2. 파생 피쳐 추가 : datetime 피처를 각각으로 분리

 

3. 파생 피처 추가 : datetime에 숨어 있는 요일 피처를 추가

 

4. 피처 제거 : 테스트 데이터에 없는 피처는 훈련에 사용해도 큰 의미가 없다.

casual과 registered 피처 제거

datetime 피처는 인덱스 역할만 하므로 타깃 값 예측에 도움 x

date 피처가 제공하는 정보는 year,month,day에 있다. 분, 초는 의미 x

막대 그래프 확인 결과 파생 피처인 day는 분별력이 없다.

month는 season 피처의 세부 분류로 볼 수 있다. 데이터가 지나치게 세분화되어 있으면 분류별 데이터의 수가 적어서 오히려 학습에 방해가 된다.

산점도 그래프와 히트맵 확인 결과 windspeed 피처에는 결측값이 많고 대여 수량과의 상관관계가 약하다.

 

이상치 제거 : weather가 4인 데이터는 이상치다.

 

모델링 전략

우수한 성적을 거두려면 본인만의 최적화된 모델을 구상해야 한다.

하지만 몸풀기 목적이므로 사이킷런이 제공하는 기본 모델들만 사용.

 

차후 자신이 만든 모델이 최소한 기본 모델들보다는 우수해야 대회에 참여한 의의가 있을 것이다.

 

  • 베이스라인 모델 : 가장 기본적인 회귀 모델인 LinearRegression 채택
  • 성능 개선 : 릿지, 라쏘, 랜덤 포레스트 회귀 모델
    • 피처 엔지니어링 : 앞의 분석 수준에서 모든 모델에서 동일하게 수행
    • 하이퍼파라미터 최적화 : 그리드서치
  • 기타 : 타깃값이 count가 아닌 log(count)임

출처 : 머신러닝 딥러닝 문제해결 전략

반응형