ADP/실기

회귀분석

hyerimir 2024. 1. 25. 21:44

 

# 회귀분석
# 선형회귀분석의 가정
# 독립변수와 종속변수 간의 선형성
# 오차의 정규성 : q-q plot, shaprio-wilk 검정
# 오차의 등분산성
# 오차의 독립성

# 회귀분석 시 검토사항
# 모형이 데이터를 잘 적합하고 있는가
# 회귀모형이 통계적으로 유의한가 : F-통계량
# 모형은 데이터를 얼마나 설명할 수 있는가 : 설명계수 R-square
# 모형 내의 회귀계수가 유의한가 : t-통계량

# kc_house_data에서 sqft_living을 독립변수, price를 종속변수로 설정하여 단순 선형 회귀분석 진행
import pandas as pd
import numpy as np
house = pd.read_csv('../data/kc_house_data.csv')

house = house[['price', 'sqft_living']]
# 독립변수와 종속변수의 선형 가정
house.corr()

y = house['price'] # 시리즈 형태
X = house[['sqft_living']] # 데이터프레임 형태

from statsmodels.formula.api import ols
lr = ols('price ~ sqft_living', data = house).fit()

# 회귀계수
lr.params

y_pred = lr.predict(X)

resid = y - y_pred

# mse
(resid**2).sum()/len(y)

# rmse
np.sqrt((resid**2).sum()/len(y))

lr.summary()
# 회귀모형의 시각화
import matplotlib.pyplot as plt
plt.scatter(X, y)
plt.plot(X, y_pred, color = 'red')

plt.xlabel('sqft_living', fontsize = 10)
plt.ylabel('price', fontsize = 10)
plt.title('Linear Regression Result')
plt.show()

# Q-Q plot
# 잔차가 정규분포를 따르는지 확인
import statsmodels.api as sm
sm.qqplot(resid, line = 'r', alpha = 0.4)
plt.show()
# scikit-learn 머신러닝 이용한 방법
sklearn.linear_model.LinearRegression().fit()

# 설명변수 차원 조정해야함
# R의 summary()와 같은 기능 없음
# 기울기와 절편 따로 호출해야함
# 잔차 자동 계산 기능 없음

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)
# 다중선형회귀분석
# 두 개 이상의 독립변수가 종속변수에 미치는 영향을 추정하는 통계 기법

import pandas as pd
import numpy as np
house = pd.read_csv('../data/kc_house_data.csv')
house.head()
house.info()

house = house.drop(['id', 'date'], axis = 1)
house = pd.get_dummies(house, columns = ['waterfront'])

ols_str = 'price ~ '
for i in house.columns.drop('price'):
	ols_str = ols_str + i + '+'
    
ols_str = ols_str[:-3]
import statsmodels.api as sm
import statsmodels.formula.api as smf

model = smf.ols(formula = ols_str, data = house)
result = model.fit()
result.summary()