데이터분석 실전1_4(데이터분석, 분산분석, 회귀분석)

3 minute read

1. 요일별 전체 전력 사용량 차이검정(ANOVA)

그래프만 보더라도 요일별 차이는 확연합니다.

그냥 눈으로 보이는 차이가 얼마나 되는지 일원분산 분석을 실시해보고, 그 이유가 어떤 요일간의 차이로 나타났는지 사후검정으로 확인해보고자 합니다.

#요일별 전체 전력사용량을 비교해야 하기 떄문에 total_usage를 새롭게 생성합니다.
data6['total_usage']=data6.iloc[:,1:6].sum(axis=1)
data6
	Time	NX1343	NX1440	NX1441	NX1332	NX1445	temp_aver	Day	total_usage
0	2017-07-01	3.1	5.6	151.5	2.9	24.8	24.1	Sat	188.0
1	2017-07-02	3.1	5.6	149.0	3.3	14.1	23.6	Sun	175.1
2	2017-07-03	23.2	29.7	150.3	9.1	44.1	23.2	Mon	256.4
3	2017-07-04	23.4	23.8	150.5	2.1	48.5	24.8	Tue	248.3
4	2017-07-05	30.3	23.1	165.0	13.1	51.0	26.0	Wed	282.6

import statsmodels.api as sm
from statsmodels.formula.api import ols

results = ols('total_usage~Day',data=data6).fit()

results.summary()
Dep. Variable:	total_usage	R-squared:	0.141
Model:	OLS	Adj. R-squared:	0.126
Method:	Least Squares	F-statistic:	9.777
Date:	Thu, 05 Mar 2020	Prob (F-statistic):	5.52e-10
Time:	17:49:03	Log-Likelihood:	-2084.4
No. Observations:	365	AIC:	4183.
Df Residuals:	358	BIC:	4210.
Df Model:	6		
Covariance Type:	nonrobust
 #F검정 결과 f통계량은 9.777이며, 유의수준은 5.52e-10으로 유의수준 .05에서 유의한 것으로 나타났습니다. 
#사실 더 중요한 것이 어떤 요일에서 가장 큰 차이가 발생했는지 이기 때문에 사후검정을 실시합니다. 

from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.multicomp import MultiComparison
mc=MultiComparison(data6['total_usage'],data6['Day'])

print(mc.tukeyhsd())
Multiple Comparison of Means - Tukey HSD, FWER=0.05  
=======================================================
group1 group2 meandiff p-adj    lower    upper   reject
-------------------------------------------------------
   Fri    Mon -56.6098 0.0021  -99.5234 -13.6962   True
   Fri    Sat -61.4365  0.001 -104.1472 -18.7258   True
   Fri    Sun -70.3958  0.001 -113.3094 -27.4822   True
   Fri    Thu  -2.8987    0.9  -45.8123  40.0149  False
   Fri    Tue    -7.03    0.9  -49.9436  35.8836  False
   Fri    Wed  -4.6975    0.9  -47.6111  38.2161  False
   Mon    Sat  -4.8268    0.9  -47.5375  37.8839  False
   Mon    Sun -13.7861    0.9  -56.6997  29.1275  False
   Mon    Thu  53.7111 0.0044   10.7975  96.6247   True
   Mon    Tue  49.5798 0.0121    6.6662  92.4934   True
   Mon    Wed  51.9123 0.0069    8.9987  94.8259   True
   Sat    Sun  -8.9593    0.9    -51.67  33.7514  False
   Sat    Thu  58.5378 0.0012   15.8271 101.2485   True
   Sat    Tue  54.4066 0.0035   11.6959  97.1173   True
   Sat    Wed   56.739 0.0019   14.0283  99.4497   True
   Sun    Thu  67.4971  0.001   24.5835 110.4107   True
   Sun    Tue  63.3659  0.001   20.4523 106.2795   True
   Sun    Wed  65.6983  0.001   22.7847 108.6119   True
   Thu    Tue  -4.1313    0.9  -47.0449  38.7823  False
   Thu    Wed  -1.7988    0.9  -44.7124  41.1148  False
   Tue    Wed   2.3325    0.9  -40.5811  45.2461  False
-------------------------------------------------------

금요일과 일요일이 평균의 차이가 가장 크게 나왔고, 전반적으로 일요일이 다른 요일(화요일, 수요일, 목요일, 금요일) 에 비해서 전력사용량이 적게 나타나서 이런 차이가 나타난 것으로 보입니다.

2. 회귀분석 실시

이번에는 회귀분석을 실시합니다.

종속변수를 평균기온으로 하고, 영향을 미친다고 가정한 요인을 5개 지역의 전력사용량 변인으로 설정하려고 합니다.

사실 논리적으로 5개 지역의 전력사용량으로 기온을 예측하는 모형을 만든다는게 논리적으로 말이 안됩니다. 그냥 연습한다는 생각으로 해당 모형을 검증해보겠습니다.

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
import pandas as pd

model = smf.ols(formula = 'temp_aver ~ NX1343 + NX1440 + NX1441 + NX1332 + NX1445', data = data6)
result = model.fit()
result.summary()

Dep. Variable:	temp_aver	R-squared:	0.486
Model:	OLS	Adj. R-squared:	0.479
Method:	Least Squares	F-statistic:	67.90
Date:	Thu, 05 Mar 2020	Prob (F-statistic):	8.11e-50
Time:	18:34:15	Log-Likelihood:	-1266.6
No. Observations:	365	AIC:	2545.
Df Residuals:	359	BIC:	2569.
Df Model:	5		
Covariance Type:	nonrobust	

# 회귀모형의 타당도를 의미하는 f통계량은 67.90이며, 
# 유의확률은 8.11e-50으로 유의수준.01에서 유의하게 나타났습니다. 
# 해당 5개의 변수로 종속변수인 기온을 약 48~49%로 설명할 수 있는 것으로 나타났습니다. 

		coef	std err	 t	P>|t|	[0.025	0.975]
Intercept	11.3003	1.133	9.970	0.000	9.071	13.529
NX1343		0.9945	0.073	13.564	0.000	0.850	1.139
NX1440		-0.2926	0.048	-6.100	0.000	-0.387	-0.198
NX1441		0.0015	0.009	0.163	0.870	-0.017	0.020
NX1332		-0.0108	0.062	-0.174	0.862	-0.133	0.111
NX1445		-0.0994	0.037	-2.675	0.008	-0.172	-0.026
Omnibus:	9.259	Durbin-Watson:	0.682
Prob(Omnibus):	0.010	Jarque-Bera (JB):	15.325
Skew:	0.108	Prob(JB):	0.000470
Kurtosis:	3.980	Cond. No.	332.

# 종속변수에 영향을 미치는 변수는 NX1343,NX1440,NX1445으로 각각 유의수준 0.01에서 유의하게 나타났습니다. 
# NX1441,NX1332 영향을 미치지 않는 것으로 나타났습니다.


Leave a comment