본문 바로가기
생활 정보/IT 정보

파이썬 데이터분석 회귀분석

by 스파이더재벌 2019. 2. 26.

목차

    728x90
    반응형
    728x170

    오늘은 파이썬으로 단순회귀분석, 다중회귀분석을 시행해 보겠습니다. 

     

    개요

    회귀분석이란 수치형 종속변수와 수치형 독립변수사이의 영향 또는 인과관계를 알 수 있는 분석이다언뜻 보면 상관관계분석과 비슷한 것 같다하지만 상관관계분석은 두 변수간의 상관관계를 수치화할 뿐 각 독립변수가 종속변수에 미치는 영향 또는 관계는 측정이 불가능하다우리는 회귀분석을 통해 종속변수에 대한 독립변수의 영향을 알려주는 회귀식을 도출해 낼 수 있다회귀식은 다음과 같다.

     

     

    도출된 회귀식에서 직선의 기울기와 상수를 알 수 있는데, 이를 통해 독립변수의 변화에 따른 종속변수의 변화를 알 수 있는 것이다. 즉 회귀분석이란 독립변수에 따라 종속변수가 얼마나 어떻게 변하는지를 알려주는 회귀모형을 도출한 후, 그 영향의 정도를 파악할 수 있는 분석이다. 회귀분석은 독립변수가 하나인 단순회귀분석과 독립변수가 2개 이상인 다중회귀분석으로 나뉜다. 또한 독립변수가 수치형으로 된 회귀모형이 일반적이지만 범주형인 더미변수를 이용한 회귀분석도 가능하다. 이때 하는 회귀분석을 더미변수를 사용한 회귀분석이라고 지칭한다. 회귀분석을 하기 위해서는 다음과 같은 전제조건이 필요하다.

     

    • 첫번째, 독립변수는 동일한 분산을 가져야한다는 등분산성이다.
    • 두번째, 독립변수와 종속변수는 선형관계에 있어야한다.
    • 세번째, 독립변수가 여러개인 경우, 독립변수간이 독립적이여야한다.
    • 네번째, 평균이 0이고 분산이 시그마제곱인 정규성을 가져야한다.

     

    단순회귀분석

    단순회귀분석이란 하나의 수치형 설명변수가 하나의 수치형 종속변수에 어떤 인과관계 또는 영향을 미치는지에 대한 분석을 말한다많은 변수는 고려하지않고 오직 하나의 종속변수와 하나의 독립변수에 의해서만 시행된다. 쇼핑몰의 입점매장 수가 고객의 방문빈도에 어떤 영향을 미치는지를 확인하려 하는 상황에 우리는 단순회귀분석을 사용한다독립변수가 X, 종속변수가 Y인 단순회귀모형은 다음과 같다.

     

    일반적으로 단순회귀모형의 회귀계수인 베타0과 베타1을 추정하기 위해 최소제곱법을 사용한다이는 오차들의 제곱합이 최소가 되도록 회귀계수를 추정하는 방법이다ϵ는 오차라고하는데오차는 독립변수의 값이 동일한 개체여도 종속변수 값이 모두 동일하지 않을 것이기때문에 개체에 따른 차이를 오차로 표현한다오차의 개념을 예를 들어보면여러 명의 남학생 키가 모두 170이라고하더라도 모두 똑같은 몸무게는 아닐 것이다우리는 이러한 차이 때문에 오차라는 개념을 사용한다이때 오차의 분포는 N(0, 시그마제곱)으로 가정하고 오차항은 서로 독립이라고 가정한다. n개의 주어진 데이터로부터 적절한 방법으로 베타0과 베타1을 추정하여 그 추정치를 각각 b0, b1 이라고 하면 다음과 같이 추정된 회귀직선(또는 회귀식)을 구할 수 있다.


    여기서 b1은 독립변수 X가 한단위 증가할때 추정된 종속변수 Y가 변화하는 양을 나타내기때문에 단순회귀분석에서 기울기인 b1은 단순회귀분석 해석시 중요하게 봐야하는 지표이다. 이어서 단순회귀분석을 더 잘 이해하기 위한 개념들을 살펴보자.

     

    • 최소제곱법 : 회귀분석에서 회귀 모형 추정을 하기 위한 회귀 직선을 구하는 방법 중 하나이다. 최소제곱법은 잔차의 제곱합을 최소화하는 회귀선을 찾은 후 회귀계수 베타를 추정하는 방법이다. 잔차란 관측값과 적합 값 간 차이를 의미한다.
    • 결정계수 : 회귀식의 적합도를 측정하는 척도이다. 회귀계수는 SSR/TSS = 1- SSE/TSS이다. 이는 반응변수의 총 제곱합 중에서 회귀직선에 의해 설명된 제곱합의 비율을 말한다. 단순회귀분석의 경우는 독립변수와 종속변수의 상관계수 제곱과 같다. 결정계수는 회귀모형이 실제 데이터를 얼마나 잘 설명해주고 있는가를 알려준다. 0~1사이의 값을 가지며 1에 가까울수록 회귀모형의 설명력이 높다고 판단한다. 이 값이 너무 작게나오면 회귀모형의 식을 해석하는 것은 무의미하다.
    • 회귀분석의 적합성 : 회귀분석결과 도출된 회귀식이 유의하지 않다면 해석을 하는 의미가 없을 것이다. 따라서, 우리는 도출된 회귀식이 통계적으로 유의한지 확인해야한다. 회귀식의 적합성 여부를 검정하기 위해 분산분석표를 이용한다. F값은 회귀방정식에 의한 제곱평균과 잔차의 제곱평균의 비율을 말한다. 이 비율이 크면 회귀식이 두 변수의 관계를 설명하는데 유의하다는 의미이다. 따라서, F값과 유의확률을 보고 회귀분석의 적합성을 판단하면 된다.

    단순회귀분석을 파이썬을 사용하여 직접 실습해보자먼저, 회귀분석에 사용할 모듈과 데이터를 불러오자.

     

    import numpy as np import statsmodels.api as sm import statsmodels.formula.api as smf import pandas as pd data = pd.read_csv('/Users/lee/Desktop/store.csv', engine='python', encoding='CP949') data.head() 

     

    Out[4]:
      총매출액 방문빈도 1회평균매출액 쿠폰사용횟수 거래기간
    0 12717240 109 116672 4 1093
    1 12802210 22 581919 20 1002
    2 12815010 27 474630 11 1066
    3 13038990 24 543291 5 1069
    4 13072260 37 353304 9 1077

    Statsmodels 란 다양한 통계 모델을 평가하고 통계 테스트를 수행하고 통계 데이터를 탐색하는 데 필요한 클래스와 함수를 제공하는 Python모듈이다. 우리가 사용할 최소제곱법을 활용한 선형회귀분석도 포함되어있다.

     

    P쇼핑몰에서 최근 인기있는 S브랜드매장을 입점시킨 결과, 고객들의 전반적인 방문빈도가 늘어났다고한다. 늘어난 방문빈도가 실제 총 매출액에 영향을 미치는지 알아보고자 한다. 이를 확인하기 위해 최소제곱법을 사용하여 단순회귀분석을 진행해보자.

    model = smf.ols(formula = '총매출액 ~ 방문빈도', data = data) result = model.fit() result.summary() 
    Out[26]:
    OLS Regression Results
    Dep. Variable: 총매출액 R-squared: 0.191
    Model: OLS Adj. R-squared: 0.184
    Method: Least Squares F-statistic: 26.64
    Date: Mon, 25 Feb 2019 Prob (F-statistic): 1.06e-06
    Time: 15:56:14 Log-Likelihood: -2015.2
    No. Observations: 115 AIC: 4034.
    Df Residuals: 113 BIC: 4040.
    Df Model: 1    
    Covariance Type: nonrobust    
      coef std err t P>|t| [0.025 0.975]
    Intercept 1.349e+07 1.89e+06 7.129 0.000 9.74e+06 1.72e+07
    방문빈도 1.448e+05 2.81e+04 5.161 0.000 8.92e+04 2e+05
    Omnibus: 54.739 Durbin-Watson: 0.421
    Prob(Omnibus): 0.000 Jarque-Bera (JB): 185.271
    Skew: 1.707 Prob(JB): 5.87e-41
    Kurtosis: 8.197 Cond. No. 138.

    model변수는 smf ols(최소제곱법)을 사용하여 회귀모형을 만든다. Formula = '종속변수 ~ 독립변수' 형식에 맞춰 분석하고자 하는 종속변수(왼쪽)와 독립변수(오른쪽)를 넣으면된다. data에는 사용하고자하는 데이터를 넣어주면 된다. fit은 모형을 적합시킨다. 실행결과는 위와 같다.

     

    일반적으로 단순회귀분석 결과를 해석 할 때, 결정계수 확인 à 모형의 적합도 확인 à 회귀계수확인 à t값과 t값의 유의확률 확인 순으로 해석을 진행한다.

     

     

    먼저, R-squared값을 보면 0.191로 나와있는 것을 볼 수 있다. 이는 회귀모형의 설명력이 19.1%라는 뜻이다. 실제로는 설명력이 조금 낮지만 실습이기 때문에 계속 회귀분석의 해석을 진행한다. 회귀모형의 F값이 26.64, 유의확률(Pr>F) 0.000으로 통계적으로 유의한 모형인 것으로 나타났다. Intercept(절편)이란 모든 독립변수가 0일 경우에 예측되는 값을 말한다. 결과 중 Intercept(절편) t값은 7.129, P>|t|값은 0.000으로 이 회귀모형의 절편값은 유의한 것으로 나타났으며 그 값은 13490000으로 나타났다. 방문빈도의 t값은 5.161, P>|t|값은 0.000으로 이 방문빈도 변수도 유의하여 방문빈도의 계수는 144800으로 도출됐다. 따라서 이 회귀모형의 식은 다음과 같다.

    A쇼핑 고객들의 방문빈도가 1회 높아질수록 총 매출액은 약 144,800원 증가한다는 뜻이다. A쇼핑은 방문빈도가 총 매출액에 많은 영향을 미친다는 것을 알았기때문에 인기있는 브랜드 입점 외 고객들의 방문빈도를 높일 수 있는 방안을 찾을 필요가 있겠다.

     

     

    다중회귀분석

    다중회귀분석이란 하나의 수치형 종속변수와 2개이상의 수치형 독립변수 사이의 영향 또는 인과관계를 설명하는 분석을 말한다. 예를 들어, 아빠의 키, 엄마의 키, 할머니의 키(독립변수)가 자녀의 키(종속변수)에 어떤 관계를 갖는지 확인하려 할 때 우리는 다중회귀분석을 사용한다. p개의 독립변수 x1, ... ,xi가 있는 다중회귀모형은 다음과 같다.

    단순회귀모형에서와 마찬가지로 잔차제곱합을 최소화하는 최소제곱법에 의해 회귀모수를 추정할 수 있으며, 추정된 회귀계수를 b0,b1, ... ,bi 라고 하면 적합된 회귀식은 다음과 같이 주어진다.

    이어서 다중회귀분석을 더 잘 이해하기 위한 개념들을 살펴보자.

     

     

            수정된 결정계수(Adjusted R-squared ) : 다중회귀분석은 단순회귀분석과는 달리 독립변수가 2개이상 들어간다. 독립변수의 수는 그 수가 많을 수록 결정계수 값이 올라가는 특성이 있다. 이를 보완한 것이 수정된 결정계수이다. 수정된 결정계수는 평균제곱오차가 가장 작은 축소모형을 선택한다. 이는 모형의 간결성과 설명력을 동시해 고려한 것이다. 따라서, 다중회귀분석에서 결정계수값을 보고 모형의 설명력을 판단하면 잘못된 판단을 할 수 있기때문에 수정된 결정계수값을 보고 모형의 설명력을 판단해야한다.

            다중공선성 : 다중공선성이란 독립변수들 간의 완전한 선형종속의 관계를 말한다. 다중회귀분석시 독립변수를 선택을 했다면 이 독립변수들 간에 상관관계가 존재하는지 확인해야한다. , 다중공선성에 문제가 있는지를 파악해야한다. 다중공선성이 존재한다면 회귀분석의 기본전제조건 중 각 독립변수는 독립적이어야하는 가정을 만족시키지 못한다. 또한, 독립변수들 간 다중공선성의 문제가 있다면 정확한 회귀모형 예측이 불가능하다. 따라서, 다중회귀분석을 수행할 땐 다중공선성의 문제를 간과해서는 안된다. 다중공선성 문제 판단기준은 다음과 같다.

    다중공선성이 존재하는 것을 파악했다면 우리는 어떻게 다중공선성 문제를 해결할 수 있을까? 다중공선성 문제해결 방법은 다음과 같다.

    • 첫번째, 다중공선성이 의심되는 변수를 제거한다. 
    • 두번째, 독립변수 입력방식을 바꿔본다.
    • 세번째, 독립변수들을 요인으로 묶어 분석을 한다.

    이러한 노력을 했음에도 불구하고 여전히 다중공선성이 존재한다면 데이터를 다시 수집하거나 다른 분석방식을 선택해야할 것이다.

     

            독립변수 선택 방법 : 다중회귀분석을 할 때는 여러개의 독립변수를 선택하므로 최적화된 회귀모형을 만들기 위해서는 어떤 변수들을 독립변수에 넣을 것인지를 잘 판단해야한다. 독립변수선택에 따라 모형의 설명력(결정계수 값)이 달라지기때문에 적절한 독립변수를 선택하는 작업은 중요하다. 독립변수를 선별하는 방법에는 4가지가 있다. 아래의 표를 보자.

    위의 표 중 적절한 방법을 사용해서 우리는 꼭 필요한 변수들만 선택해서 좋은 모형을 만들 수 있다. 이제 다중회귀분석을 실습해보자.

     

    다중회귀분석도 단순회귀분석에서 사용한 같은 모듈을 이용하여 실습할 수 있다. P쇼핑몰은 방문빈도에 어떤 변수가 영향을 미치는지 확인하기위해 고객의 거래기간, 총매출액, 쿠폰사용횟수 변수를 사용해 다중회귀분석을 시행했다.

    model = smf.ols(formula = '방문빈도 ~ 거래기간 + 총매출액 + 쿠폰사용횟수', data = data) result = model.fit() result.summary() 

     

     

    Out[27]:
    OLS Regression Results
    Dep. Variable: 방문빈도 R-squared: 0.245
    Model: OLS Adj. R-squared: 0.225
    Method: Least Squares F-statistic: 12.02
    Date: Mon, 25 Feb 2019 Prob (F-statistic): 7.14e-07
    Time: 15:56:14 Log-Likelihood: -549.34
    No. Observations: 115 AIC: 1107.
    Df Residuals: 111 BIC: 1118.
    Df Model: 3    
    Covariance Type: nonrobust    
      coef std err t P>|t| [0.025 0.975]
    Intercept -55.1744 31.260 -1.765 0.080 -117.117 6.768
    거래기간 0.0786 0.029 2.665 0.009 0.020 0.137
    총매출액 1.215e-06 2.51e-07 4.834 0.000 7.17e-07 1.71e-06
    쿠폰사용횟수 0.2959 0.312 0.948 0.345 -0.323 0.915
    Omnibus: 50.615 Durbin-Watson: 2.073
    Prob(Omnibus): 0.000 Jarque-Bera (JB): 159.266
    Skew: 1.592 Prob(JB): 2.61e-35
    Kurtosis: 7.806 Cond. No. 2.82e+08

    다중회귀분석에서 formula'종속변수 ~ 독립변수1 + 독립변수2 + 독립변수3'과 같이 형식에 맞춰 분석하고자 하는 종속변수(왼쪽)와 독립변수(오른쪽)를 넣으면 된다. 다중회귀분석에 대한 실행결과는 위와 같다.

    일반적으로 다중회귀분석 결과를 해석 할 때는 수정된 결정계수 확인 à 모형의 적합도 확인 à 회귀계수확인 후 해석 à 다중공선성 확인 순으로 해석을 진행한다.

     

    다중회귀분석이기 때문에 R-squared값 대신 Adj. R-squared값을 보자. Adj. R-squared값이 0.225로 나와있는 것을 볼 수 있다. 이는 회귀모형의 설명력이 22.5%라는 뜻이다. F값이 12.02, 유의확률(Pr>F) 0.000으로 통계적으로 유의한 모형인 것으로 나타났다. Intercept(절편)의 결과를 확인해 보면 t값은 -1.765, P>|t|값은 0.08로 신뢰수준 90%하에서 유의한 것으로 나타났으며 그 값은 -55.174로 나타났다. 다음으로 회귀계수를 살펴보자. 거래기간의 계수는 0.0786, 총매출액의 계수는 0.000001, 쿠폰사용횟수의 계수는 0.295로 도출됐다. 하지만 쿠폰사용횟수의 경우, 유의확률이 기준치를 초과하여 해석에서는 제외한다. 따라서 이 회귀모형의 식은 다음과 같다.

    P쇼핑몰 고객들의 거래기간이 1단위(1일) 증가하면 총매출액은 평균적으로 0.0786 증가했다. 총매출액이 1단위 증가하면 방문빈도는은 평균적으로 0.000001증가한다는 뜻이이다. 즉, 총매출액은 방문빈도에 별다른 영향을 미치지 못했다. 마지막으로 다중공선성 존재여부를 확인하기 위해 VIF값을 구해보자.

    y, X = dmatrices("방문빈도 ~" + features, data=data, return_type = "dataframe") vif = pd.DataFrame() vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif["features"] = X.columns vif.round(1) 

     

     

    Out[29]:
      VIF Factor features
    0 131.4 Intercept
    1 1.0 거래기간
    2 1.0 총매출액
    3 1.0 쿠폰사용횟수


    다중회귀분석을 하는데 사용한 독립변수들의 
    VIF값이 모두 10이하로 다중공선성에 문제는 없었다따라서, P쇼핑몰 고객들의 거래기간이 증가할 때, 방문빈도도 증가하는 것으로 보아 고객이 이탈되지 않도록 신경써야할 필요가 있을 것이다또한, 총매출액은 방문빈도에 별다른 영향을 미치지 못했으므로 방문유도 시 매출액에 집중하기 보다는 고객의 이목을 끌만한 다른 이벤트들을 준비해서 고객들의 방문을 유도해야할 것이다. 

     

    728x90
    반응형
    그리드형