ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Simple Linear Regression에 대한 탐구
    데이터 분석 공부 2020. 9. 10. 01:17

    머신러닝에 대한 기본적인 모델들을 공부할 때, 기본적인 것들 중에서 Simple Linear Regression을 마주할 수 있다. 그래서 오늘은 Regression, 즉 회귀가 무엇인지에 대한 글을 쓰려고 한다.

     

    1. Regression이 뭐야?

    통계학적으로는 ouput variable과 input variable간의 관계를 측정하는 기준으로써 정의됐다. 그리고, Linear Regression, 선형 회귀는 이전과 이후 사건의 선형 관계를 알고자 하는 방법이다.input 변수들의 갯수에 따라서 선형 회귀는 Simple Linear Regression(1개의 input), Multiple linear regression(다수의 input)으로 나뉜다.

     

    2. 표현식

    input 변수를 보통 x, output 변수를 보통 y라고 한다. 이를 식으로 나타내면, 아래 그림의 y = ax + b로 볼 수 있다.

    이러한 식의 과거 학생시절에 많이 봤던 것 같다. a는 기울기, b는 절현으로 말이다. 자, 이 그림을 미루어보아 단순선형회귀(Simple linear regression)의 핵심은 input과 output 변수 사이의 선형관계를 파악하고, 향후 추가되 input변수들의 output 값을 예측하면 것이다.

     

    3. 실습(Data Visualization) with Advertising data

     

    Introduction to Statistical Learning

     

    faculty.marshall.usc.edu

    Sales (*1000 units) vs Advertising budget (*1000 USD)

     

    총 800개의 데이터이고, 200개의 각각의 데이터들이 보인다. 광고 예산은 TV, 라디오, 신문에 분배되어 있고, Sales는 아마 매출이라고 볼 수 있을거 같다.(output?)

     

    자, 지금부터 위의 3개의 미디어가 Sales와 어떤 관계를 가지고 있는지 보려고 합니다. 물론, 단순선형회귀를 활용하죠.

     

     

    TV과 Sales 관계: 우상향하는 모습을 보이는걸로 봐서 뭔가 의미가 있다.

    라디오와 Sales 관계: 우상향하는 모습을 보이는걸로 봐서 뭔가 의미가 있다.

    신문과 Sales 관계: 어떤 특징이 안보이는거 같아요.

     

    이렇게 두 변수간의 관계가 있는거 같다고 하거나 없다고 할 때는, "상관관계가 있다, 없다"라고 간단하게 생각합시다.

     

    4. 단순선형회귀 모델 만들어보기

    위에서 TV가 Sales랑 상관관계를 보였기에, 이를 활용해서 모델을 만들어 보겠다요.

    Sales = b+ TV*x

     

    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    
    X = ad_df['TV'].values.reshape(-1,1)
    y = ad_df['sales'].values.reshape(-1,1)
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state = 53)
    
    model = LinearRegression(fit_intercept=True)
    # fit_intercept 인수는 모형에 상수항이 있는가 없는가를 결정하는 인수이다. 디폴트 값이 True이고 만약 상수항이 없으면 fit_intercept=False로 설정한다.
    model = model.fit(X_train, y_train)
    
    # test 데이터를 예측하고 저장하기
    train_fit = model.predict(X_train)
    test_pred = model.predict(X_test)
    
    
    
    

     

    그림을 보면 알겠지만, 회귀선이 train 과 test dataset 상에서 모두 학습한 내용을 바탕으로 시각화 했을 떄, 선형 관계가 나와서 좋음

    다음으로, intercept와 x-coefficient(slope)를 살펴본다.

    Intercept는 절편을 의미

    Coefficients: 추정된 회귀식의 계수를 의미

     

    intercept값이 7.03이면, TV 예산이 투입이 안됐을 때, Sales는 대략 7.03정도, 즉, 7,030개 정도가 판매된다는 의미

     

    coefficient값은 독립변수의 값의 변화에 따른 결과값의 변화를 측정할 때 쓰인다 => 기울기

    만약, coefficient가 0.048이라면, 만약 TV의 예산을 1단위 늘리면($1000), sales는 1,000 * 0.048 = 48 즉, 48유닛이 증가함을 의미

     

    라디오와 신문에 대한 값도 한 번 찾아보자.

    Intercept: 9.35

    coefficient: 0.2

     

    신문과 Sales의 분석

    Intercept: 12.5

    Coefficient: 0.05

     

    자. 간단하게 선형 회귀 모델을 해봤다.여기서 고민해야할 포인트는 바로,

    "어떻게 TV광고에 배정된 예산이 Sales의 값을 예측하는데 충분한가?"이다.

    "이정도 모델가지고 비즈니스 의사결정을 할 때, 모델을 활용할 근거가 있을까?

    "만약에 사용가능하다면? 그러면 어떤 손실값들을 고려해야 할까?

    이러한 일련의 질문의 과정은 현실 업무 환경에서 아주 중요한 질문들이다.

     

    이러한 질문에 대한 답의 근거로써, 모델을 측정하고, 결과값을 예측하는 동안 얼마만큼의  error가 발생하는지 측정한다.

     

    선형회귀분석에서 error는 현재와 미래? 상태의 간격을 말하는거라 생각하면 된다. 지금 나는 만원이 있지만, 주식을 통해 1년 뒤에 100만원을 만들겠어!!! 아주 그냥 error투성이이지. 이거랑 비슷한 맥락으로 생각하면 이해하기 쉬울 것이다.

     

     

    선위에 있거나 선 근처에 있는 점들은 모델이 보다 정확하게 예측할 수 있는 값들이다.하지만, 점들이 많고, 점들과 선간의 간극이 곧 error값을 의미한다.

    그래서 error 함수는 다음과 같다.

    하지만, 이러한 차이가 +,- 모두 존재하기 때문에 error값이 -값이 나올 수 있다. 이를 방지하기 위해 다음과 같은 식도 활용될 수 있다.\

    좀 더 위의 내용을 자세히 풀어 써보겠다.

     

    실제 값과 회귀 모델의 차이에 따른 오류 값을 남은 오류, 즉 잔차라고 한다. 최적의 회귀 모델은 바로 전체 데이터의 잔차 합이 최소가 되는 모델이다. 동시에 오류 값 합이 최소가 될 수 있는 최적의 회귀 계수를 찾는다는 의미이다.

     

    잔차가 +,-값이 나오면, 전체 데이터의 오류 합을 구하기 위해 단순히 더했다가는 뜻하지 않게 오류의 합이 크게 줄 수 있다. 이를 방지하기 위해

    1. 절댓값을 취해서 더하는 방법(Mean Absolute Error)

    2. 오류 값의 제곱을 구해서 더하는 방식(RSS, Residual Sum  of Square)

    같은 방법들이 있다.

     

    TV와 Sales 모델에서 error값을 구하면

    이 나온다.

Designed by Tistory.