머신러닝 & AI 첫걸음 시작하기_2 주차

✅ 회귀분석

1주차에 단순히 머신러닝의 전체적인 개요를 배웠다면 2주차에서는 각 머신러닝의 분석 방법에 대해 본격적으로 학습이 시작되고 그 첫번째가 회귀 분석이다.

 

단순하게 분석 방법에 대한 코딩을 반복하면서 따라하는 것도 큰 훈련이기는 하지만 머신러닝은 결국엔 수학적 개념(통계)를 바탕으로 하기 때문에 알고리즘을 사용해서 결과를 도출 했다고 하더라도 아래와 같이 회귀 분석 결과의 해석 방법을 이해야만 한다. 어려운 과정이지만 아래와 같이 설명이 가능하도록 이론적으로 어느정도 설명이 가능도록 학습 해야한다.

 

- 회귀 계수 RM이 1단위 증가 할때 집 값이 9단위로 증가한다

- 단순히 회귀 계수를 보고 판단하면 안되면 P-value를 보고 의미있는 변수인지 확인 해야 한다 하지만 여기서 는 모든 변수가 p-value 값이 낮아 R-squared를 추가로 보고 판단해야한다.

- R-squared 값은 0.484이라는 결과를 가지게 되며 48%정확도의 설명력을 가진 모델이란 것을 나타낸다

 

결정계수(R-Squared)는 회귀 모델에서 독립변수가 종속변수를 얼마만큼 설명해 주는지를 가리키는 지표이고 설명력이라고 부르기도 한다.

 

statsmodels 선형 회귀 분석

  • 독립변수(x)는 이름 그대로 독립적인 형태
  • 변수들 간에 상관관계가 있다면 결과는 왜곡되며 상관관계가 있는 변수는 제거 해야함
  • 변수들은 정규분포를 가진다는 가정이 전제
  • 종속변수(Y)와 독립변수(X)는 선형 상관관계를 가지는 것을 가정
 
선형 회귀 모델의 식 형태는 "a  = B0 + B1 * b"의 형태로 기본 코딩은 아래와 같은 형태가 된다.
import statsmodels.api as sm 
 x = data.a.values 
y = data.b.values 
model = sm.OLS(y, x) 
result = model.fit() 
result.summary()
 

R-squared(결정계수)

R제곱이라고도 불리며 회귀 모델에서 독립변수가 종속변수를 얼마만큼 설명해 주는지 가르키는 지표이며 설명력이라고 부르기도 함 결정계수가 높을 수록 독립변수가 종속변수를 많이 설명한다는 뜻으로 독립변수의 수가 증가하면 상승
  • 0.484라는 결과 값은 얼마나 선형성을 띄고 있나를 표현한 수치 (a=B0 + B1 * weight)
  • 범위는 0~1사의 값으로 0이면 모델의 설명력이 없는 상태
  • 1에 가까울 수록 모델이 데이터를 잘 설명해지고 있는 상태로 0.4 이상이면 괜찮은 모델이라 함(절대적인건 아님)
 

coef(회귀 계수; coefficient) / intercept 절편 kospi 기울기

데이터로 얻은 계수의 추정치
  • const : y절편(beta0) -34.6706
  • std err : 계수 추정치의 표준편차
  • t : t검정 통계량 값
  • pvalue가 0.1보다 큰 경우 유 의미
RM이 1단위 증가 할 때 집 값이 9단위로 증가하나 p-value값이 0으로 R-squared를 확인 해야함
 
P>|t| (유의 확률)
독립변수의 유의 확률로 보통 독립 변수가 95%의 신뢰도를 가져야 유의미하다 판단 유의 확률은 0.05보다 작은 값이 산출된다. 0.05보다 작으면 독립변수가 종속변수에 영향을 미치는 것이 유의미하다.
  • p-value는 어떤 가설을 전제로, 그 가설이 맞는다는 가정 하에, 내가 현재 구한 통계 값이 얼마나 자주 나올 것인가를 의미한다. p-vaule 값이 낮으면 우연히 얻어진 값이 아니라는 뜻
 
R-squeared가 0.4 이상이고, p-value가 0.05 보다 작다면 유의한 결과
 

✅  로지스틱 회귀분석 실습

직장에서 시간이 날때와 집에서 코딩이 가능하도록 클라우드 환경이 필요해 구글에서 제공하는 colab에 파일을 올려서 간편하게 실습이 가능하도록 했다.

 

# 라이브러리 
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score, roc_auc_score, roc_curve
import statsmodels.api as sm
import matplotlib.pyplot as plt
import time 

# Personal Loan 데이터 불러오기

ploan = pd.read_csv("./Personal Loan.csv")

# 필요한 변수만 사용하기 위해 사용하지 않을 변수 제거 ID, zip, code 

ploan_processed = ploan.dropna().drop["ID","ZIP code"], axis=1, inplace = False)

# 회귀모델에서 b0 상수항 추가

ploan_processed = sm.add_constant(ploan_processed,has_constant = "add")
ploan_processed.head()



# 설명변수 X와 타겟변수 Y/학습과 평가 데이터를 분리 
# 대출여부는 1 or 0으로 결정된다. 즉 target이 1/0의 값을 갖기에
# 로지스틱 회귀모형이 적합하다.

feature_columns = ploan_processed.columns.difference(["Personal Loan"])
X = ploan_processed[feature_columns]
y = ploan_processed["Personal Loan"]

train_x, test_X ,train_y, test_y = train_test_split(X, y, stratify=y,train_size=0.7,test_size=0.3,random_state=1)
print(train_x.shape, test_x.shape, train_y.shape, test_y.shape)


# 로지스틱 모형 
model = sm.Logit(train_y, train_x)

# 다변수함수에 뉴턴방법을 적용한 로지스틱 회귀모형
results = model.fit(method = "newton")    


results.summary()

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유