티스토리 뷰

날씨요인에 관한 보다 자세한 분석을 위해 데이터를 좀 손봐야 했다.

우선 데이터를 보내온 대여소가 30개 미만으로 대표성이 부족해 보이는 날을 제외하였다. 835일 중 이틀(2015년 10월 3일: 24개소, 2017년 7월 6일: 3개소)이 이에 해당된다. 그 외에도 유효한 집계로 보기 어려운 날이 몇 보이지만 자칫 데이터 마사지가 될까 봐 그냥 가지고 간다.



그리고 기온과 사용빈도의 관계를 반영하기로 하였다. 즉 일일평균기온 20도를 기준으로 사용빈도가 변화하는 패턴을 감안하여, 일일평균기온값을 20도로부터의 거리로 변환하여 변수로 사용하였다. 

t_m_20 = 20 - abs(temp_mean - 20)

이렇게 하자 기온과 대여건수의 관계가 아래와 같이 좀 더 단순해졌다.



그리고 비/눈이 온 날과 그렇지 않은 날을 구분하여 보기로 하였다. 한국에서는 밖에서 비 맞고 다니는 것을 이상하게 여기는 문화가 뚜렷하기 때문에, 강수 여부는 자전거 이용률에 결정적 영향을 주는 변수로 볼 수 있다.

여기서 어떤 기준으로 강우일/비강우일을 구분할 것인가는 간단치 않은 문제다. 일일 강우량 20mm라도 한밤중 반짝 소나기였다면 자전거 이용에 별 영향이 없겠지만, 5mm라도 하루종일 비가 오다 말다 했다면 자전거 이용은 저조했을 것이다. 더구나 한반도의 국지성 호우가 잦아지는 패턴을 감안할 때, 서울기상관측소만의 강우기록만으로 서울 전역에 비가 왔는지 여부를 판단하는 것은 무리다. 아무튼 일단은 비가 오지 않은 만을 구분해내기 위해, 기상관측기록 기준 강수량 0.5mm 미만인 날을 식별하였다. 그 결과 638일의 ‘비강우일’을 구분할 수 있었다.


일일강수량 0.5mm 미만 비강우일(dry)과 강우일(wet)을 구분, 일일평균기온(섭씨 20도와의 차이값)과 일일평균 대여건수 관계를 도시한 scatterplot


이렇게 하고 나니 비가 오지 않은 날 평균기온(섭씨 20도로부터의 차이값)과 평균대여건수의 관계가 좀 더 선형적으로 나타났다. 약간의 이분산(heteroscedasticity)을 무시하고 둘의 상관관계를 python statsmodels 0.8.0을 이용해 단순회귀분석한 결과는 아래와 같다.

                            OLS Regression Results                            

==============================================================================

R-squared:                       0.696

Adj. R-squared:                  0.695

F-statistic:                     1455.

Prob (F-statistic):          1.72e-166

Log-Likelihood:                -1994.5

No. Observations:                 638

Df Residuals:                     636

Df Model:                           1                                         

Covariance Type:            nonrobust                                         

==============================================================================

                 coef    std err          t      P>|t|      [0.025      0.975]

------------------------------------------------------------------------------

const          8.0836      0.332     24.347      0.000       7.432       8.736

t_m_20         1.0263      0.027     38.138      0.000       0.973       1.079


도시에서의 사회현상이 기온만으로 r2=0.7에 가까운 선형회귀모델을 갖는다는 건 흔한 일은 아닐 것이다. 그러나 많은 사람들은 이건 너무 뻔한 설명이라고 여길 것이다. 나 역시도 기온과 같은 계절요인으로 설명되지 않는 다른 변수의 영향에 관심이 간다.

그렇다면 어떤 것이 또다른 설명변수일까? 앞서 그래프를 볼 때 일단 따릉이의 인기 상승을 고려해야 할 것 같다. 일평균 대여건수가 2016년 15.31대에서 2017년 19.65대로 대여건수 상승폭이 대여소 수의 증가폭을 능가하였다. matplotlib으로 시간축을 포함한 3d scatterplot을 그려보면 위 scatterplot에서는 숨겨졌던 변화 패턴이 가시화한다.

시간축(date, 2015.9.19. - 2017.12.31.을 양끝점으로)을 포함한 scatterplot. 시간 진행에 따른 일일 대여건수의 전반적 증가와 강우일의 상대적으로 낮은 대여건수가 보인다.



그런데 회귀분석으로 나온 계수들을 그대로 받아들일 수는 없다. 사실 이 분석에서 이분산보다 중요한 데이터 특성은 시계열 데이터의 자기상관성(autocorrelation)이다. 간단히 말해 어떤 시점의 값이 어떤 간격을 두고 이전 값(들)과 상관관계를 가지고 있다, 이 자기상관성을 모델에 포함시켜 통제하지 않으면 회귀분석의 전제를 위배하게 된다, 그런 상황이다.

위의 회귀분석에 대한 잔차 분포를 보면 시간에 따라 선형의 (+) 변화가 드러난다. 일단 시간을 회귀식 설명변수에 포함시켜야 한다는 뜻이 되겠다.


기온(temp_mean_20)과 일일 대여건수(rent_mean) 회귀분석에 대한 잔차 분포


                            OLS Regression Results                            

==============================================================================

R-squared:                       0.846

Adj. R-squared:                  0.845

F-statistic:                     1740.

Prob (F-statistic):          2.17e-258

Log-Likelihood:                -1778.0

AIC:                             3562.

BIC:                             3575.

Df Model:                           2                                         

Covariance Type:            nonrobust                                         

==============================================================================

                 coef    std err          t      P>|t|      [0.025      0.975]

------------------------------------------------------------------------------

const          1.7958      0.347      5.181      0.000       1.115       2.476

t_m_20         0.9916      0.019     51.560      0.000       0.954       1.029

date_id        0.0161      0.001     24.834      0.000       0.015       0.017


잔차 분포를 다시 확인해 보면 시간축의 영향이 사라진 것을 확인할 수 있고 정규성도 확보되었다. (p = 1.05e-09) 다중공선성도 문제가 없었다. 단 여전히 시계열 데이터 특유의 자기상관성이 확연하다. 정확한 수치모델을 구축하는 것이 이 글의 목적은 아닐 뿐더러 안그래도 없는 재미를 더 반감시킬 것 같아 굳이 더 들어가지는 않으련다.

그래도 대략, 맑거나 흐린 날 평균기온이 20도에 1도 가까워질 때마다 대여소별로 따릉이 대여건수가 1대 증가하는 패턴이 보인다는 정도의 말을 하는 것이 큰 무리는 아닐 것이다.


[기온(temp_mean_20), 시간(date_id)]과 일일 대여건수(rent_mean) 회귀분석에 대한 잔차 분포


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday