LightGBM을 설치하는데 고전하다가, 프로젝트 기간 안에 설치 및 적용이 어려울 것 같아 XGBoost로 만족하고 공부하기로 했다.


사실 XGBoost, LightGBM 등은 재작년 쯤부터 핫하게 들어왔던 키워드였으나, 캐글을 열심히 하지 않아서인지 실제로 적용해볼 기회는 없었다.


이번에 변수의 영향도, 관계보다 예측력에 목적이 있는 프로젝트를 진행하다보니 관심을 가지고 학습하기로 했다.



1. Bagging vs Boosting

  : 둘 모두 앙상블 방법.

    랜덤하게 샘플링하여 동일한 방법을 적용하는 것과 다르게

    앞 단계에서 발생하는 오차를 모델링하며, 각 단계에서의 최적 가중치를 추적


2. Boosting은 numeric한 feature만 입력해야한다. why?


https://www.kaggle.com/c/avito-demand-prediction/discussion/57094


참고




3. GBM vs XGBoost vs LightGBM

   (출처 : https://www.kaggle.com/nschneider/gbm-vs-xgboost-vs-lightgbm/notebook)


Additional Observations

GBM

Advantages:

  • None

Disadvantages:

  • No early exit
  • Slower training
  • Less accurate

xgboost

Advantages:

  • Proven success (on kaggle)
  • Now with Histogram Binning

Disadvantages:

  • Traditionally slower than lightGBM, but tree_method = 'hist' is a big improvement.
    → LightGBM을 쓰지 않아도, 충분히 속도 개선와 예측력 개선이 가능할 것으로 보인다.

lightGBM

Advantages:

  • Fast training efficiency
  • Low memory usage
  • Better accuracy
  • Parallel learning supported
  • Deal with large scale data
  • Corporate supported

Disadvantages:

  • Newer, so less community documentation




쿠폰 1장을 가져가면 n개의 사탕을 주는 가게가 있다고 하자.


첫째 날 1장을 가지고 가 2개의 사탕을 받았고,

둘째 날 2장을 가지고 가 4개의 사탕을 받았고,

셋째 날 3장을 가지고 가 6개의 사탕을 받았고,

넷째 날 4장을 가지고 가 8개의 사탕을 받았다.


다음 날 쿠폰을 10장 가져간다면 몇 개의 사탕을 받을 수 있을까?

물론 아닐수도 있지만, 대부분은 20개의 사탕을 받을 수 있을 것이라고 예상하고 이러한 추론은 어느정도 타당하다.



다음으로  이렇게 다시 가정해보자.


첫째 날 1장을 가지고 가 2개의 사탕을 받았고,

둘째 날 2장을 가지고 가 3개의 사탕을 받았고,

셋째 날 3장을 가지고 가 6개의 사탕을 받았고,

넷째 날 4장을 가지고 가 7개의 사탕을 받았다.


이럴 때면 다음 날 쿠폰을 가져갈 때 받을 수 있는 사탕의 개수를 짐작할 수 있을까?

확신할 순 없지만 어느정도 받을 수 있을거라는 감은 있을 것다.

이 또한 아닐 수 있지만, 어느정도 타당하게 여겨질 것이다.



첫번째 사례에서 쿠폰 당 2개의 사탕을 준다고 짐작했다면,

두번째 사례에선 쿠폰 당 사탕 몇 개를 주는지 어떻게 말할 수 있을까?


아래의 선에 대해 생각해보자.



우리는 네 점을 이어주는 선에 대해 고려할 수 있다.

하지만 하나의 직선으로 4개의 점을 한 번에 이을 순 없다.

그렇다면 모든 점을 다 지나진 않는 직선을 그리던가, 네점을 모두 이을수있는 곡선을 생각할 수 있다.


첫째로 곡선을 그었을 때, 쿠폰을 10장 가져가면 몇장을 받을 수 있을지 쉽게 떠올릴 수 있을까?

내 머릿 속에서 쉽게 떠오른다고 해도 다른 사람이 타당하다고 할 수 있을까?

불가능하진 않지만 너무 복잡하고, 그렇게까지 완벽하게 알고 싶진 않을 것이다.(사실 완벽하지도 않음.)


다시 모든 점을 다 지나진 않지만, 단순한 직선을 생각해보자.

이 직선을 그으면 직선의 기울기가 주어지기 때문에 한 개의 쿠폰 당 몇개의 사탕을 받을지 쉽게 짐작할 수 있다.

이렇게 직관적으로 이해하기 편하기 때문에 두 변수 간 추세(선형 증감)을 판단하는데는 선형회귀분석을 활용한다.


단순한 직선을 긋기로 했으니, 이제 이 직선을 어떻게 그어야 다른 사람(상사)이 합리적으로 받아들일 수 있을까?

  - 우리는 직선을 긋고나면 예측값으로 직선 위의 점을 선택할 것이다.

    현재 가지고 있는 값(이 경우엔 4개의 점)을 알고 있으니, 

    쿠폰의 개수가 같을 때 직선 상의 점과 실제 점 사이의 차이가 가장 작아지도록 만들면 좋을 것이다.


    수식을 적어서 보이기 번거로운 관계로, 이러한 작업을 수행하여 위의 직선을 그리는 방법이 "회귀분석"이다.

    다만 직선 상의 점과 실제 점 사이의 차이를 어떻게 정의하느냐에 따라 이 직선은 달라질 수 있다.

    (합리적으로 받아들일 수 있는 직선을 긋는 것이지, 결코 어떤 상황에서도 들어맞는 최고의 직선을 찾는 것이 아니다.)


    이 경우엔 쿠폰 한 장당 1.8개(직선의 기울기)의 사탕을 받을 수 있을거라고 생각할 수 있다.


> lm(candy~coupon,data=a)


Call:

lm(formula = candy ~ coupon, data = a)


Coefficients:

(Intercept)       coupon  

        0.0          1.8  


   

예제가 간단하여 이러한 직선이 왜 필요할지 납득하지 못할 수도 있다.

아래의 예제를 살펴보자.

온도(temp)와 자전거 렌탈 수요(count)에 대한 정보이며, 자료는 약 10,000개의 행을 가지고 있다.

아래의 그림은 10,000개 中 랜덤하게 1,000개를 뽑아 대응하는 점을 찍은 것이다.




이것을 보고 23도일 때의 자전거 수요를 바로 이야기할 수 있을까?

이런 경우에 위의 예제보다 더욱 효과적으로 회귀직선을 사용할 수 있을 것이다.

아래는 회귀직선을 그은 것이다.



> mdl <- lm(count~temp, data=train[smp,])

> mdl


Call:

lm(formula = count ~ temp, data = train[smp, ])


Coefficients:

(Intercept)         temp  

     22.783        8.333  


직선을 그을 수 있고, 1도가 올라갈 때 약 8개의 자전거 수요가 상승한다고 말할 수 있을 것이다.


이 자료의 경우 자료 자체가 가진 퍼진 정도가 크고, 자전거 수요가 낮은 경우가 많기에 눈에 보이는 것보다 직선이 낮게 잡혔다.

이 직선으로 특정 일자의 자전거 수요를 예측한다면, 잘 맞추는 것을 기대하긴 어려울 것이다.

하지만 눈으로 보기에 어지러운 자료들을 어떤 기준으로 정리하여 직선으로 나타낼 수 있다는 것에 의의가 있다.


인공지능, 딥러닝 등을 논하는 시기에 왠 선형회귀냐 하겠지만

호랑이 잡는 칼(?)로 사과를 깎을 수 없듯, 직관적으로 추세를 확인하기에 여전히 긍정적으로 활용할 여지가 있다.

(사실 선형회귀를 모르면 딥러닝 원리도 이해할 수 없다.)


=========================================================================


위의 진행은 통계 프로그램인 R로 진행되었다.

이 추세선의 정도(기울기)를 엑셀로 구하려면 어떻게 해야할까?

다행히 하나하나 계산하지 않아도 'LINEST', 'INTERCEPT' 의 두가지 함수로 선형회귀의 계수를 구할 수 있다.

※ 수식 또는 입력해야할 자료에서 y는 분석(예측)할 값, x는 분석(예측)을 위해 준비된 값을 말한다.




위에서 R로 구한 값과 왜 다르지? 라고 생각하시는 분을 위해 아래에 결과를 제시한다.

자료는 동일하지만, 위에서는 10,000개의 점을 모두 찍으면 시각적으로 보기가 싫어서 1000개만 샘플링하고 회귀직선을 만든 것이기 때문에 다르다.






이상 수식이 없어 실망하실 수 있지만, 엑셀로 회귀계수 구하는 법을 찾다가 작성한 내용이기에 양해를 구한다.

회귀 직선이 타당한지를 살피는 여러가지 기준과 방법이 있는데, 

이는 회귀직선의 계수를 어떻게 구하는 지를 이해해야 올바르게 사용이 가능하므로 여기서 다루지 않는다.

(다른 분의 블로그 들어가서 찾아봐도 많음...)

'분석 > 통계' 카테고리의 다른 글

Time Series study  (0) 2019.03.09
최종 머신러닝 모형에서 variance를 줄이는 방법  (0) 2019.03.09
자기상관(Autocorrelation)  (0) 2019.03.02
통화수요예측을 위한 자료수집  (0) 2019.02.25
통계란 무엇일까?  (0) 2019.02.24
통계학은 오차의 과학이다.

회귀문제는 가지고 있는 자료로 표현할수 있는 부분(신호)과 그렇지 못한 부분(소음, 오차)을 구분하는 좋은 방법이다.

이상적으로 표현하고 싶은 현상을 주어진 자료로만 표현하고자 하는 경우 신호에 접근할 수 있는 상한은 존재할 것이다.

예를 들어 카드사 콜센터에 인입되는 통화량을 예측할 때 고객의 결제일은 중요한 변수이다. 하지만 결제일이 중요한 변수라는 것을 모르고 있다면 이 부분의 신호를 파악하기 어렵다.

회귀모델을 만들때 오차항에 대한 가정을 하고 신호와 오차를 분리한다. 주어진 자료로 우리가 가정한 오차만큼을 제외한 부분을 잘 설명할 수 있다면, 우리가 만들어낸 모델은 적합하다고 할 수 있다. 이를 평가하기 위해 모델을 만든 후 잔차의 패턴으로 모델의 적합성을 진단한다.

시계열 자료를 분석하는 회귀모형을 만들때도 잔차의 패턴을 보고 모형적합성을 진단할 수 있다. 관측된 값을 시간순으로 정렬한 후 잔차의 패턴을 살펴보았을때 일정한 주기성, 트렌드를 보인다면 오차를 잘 구분해낸 모형이라고 할 수 없다.

1) 구분해내지 못한 오차를 표현할 수 있는 변수를 찾는다면 이러한 문제가 해결될 것인가?
-> 그렇다고 생각함. 이러한 문제가 발생하는 것은 시계열 자료의 특수성이라기 보다 타겟값에 영향을 미치는 추가적인 요인을 발견하지 못한 것이다. 이런 관점에서 시계열 자료라는 특수성은 문제를 다른 관점에서 해결할 수 있는 힌트가 된다.

2) 힌트란 무엇인가?
-> 우리가 확보하지 못한 중요한 변수를 새롭게 발견하는 것은 어렵다. 하지만 오차가 직전의 값에 일정한 영향을 받는다는 정보만으로 이 현상을 나타내는 변수를 생성할 수 있다. 물론 이 변수가 어떤 곳에 기인하는지는 확인이 어려운 경우가 많을 것이다.

직전 오차에 일정한 값(r)을 곱한 값과 새롭게 정의할 오차의 합으로 현재 시기의 오차를 정의할 수 있다. 이 정의를 바탕으로 기존의 회귀식을 변형한 새로운 회귀식을 표현할 수 있다. 새로 만들어진 회귀식의 오차는 정규성, 등분산성, 독립성 등을 따를 것으로 가정하고 모수를 추정할 때 r도 추가로 추정할 수 있다.

이렇게 우리는 가지고 있지 않은 변수이지만, 시간(또는 순서)에 영향을 받을 것이라는 믿음으로 개선된 회귀모형을 추정할 수 있다. 즉 우리가 원하는 가정에 만족하는 만큼 소음과 신호를 분리할 수 있다.

1. 자전거 수요 예측

  - https://brunch.co.kr/@gimmesilver/2

  - 자전거 수요를 예측하는 프로세스

  ※ 통화수요를 예측한다는 것과의 차이점...

  - 다른 캐글 커널을 살펴보는 것도 가능할 듯


2. 패키지 수동 다운로드

  - https://rfriend.tistory.com/tag/R%20package%20%EC%88%98%EB%8F%99%EC%84%A4%EC%B9%98


3. 참고논문

  1) Interday Forecasting and Intraday Updating of Call Center Arrivals


4년간 통계학을 공부했다.


누군가에겐 짧고, 또 누군가에겐 긴 시간인 4년은 무의식 중에 여러가지 철학을 안겨주었을 것이다.


고작 이정도로 학문을 논한다는 반발이 조금 두렵지만, 


지금까지 내 인생에 약 15%를 할애한 곳에서 어떠한 철학도 말할 수 없다는 그게 더 두려운 일이 아닐까?




본질적으로 통계학은 의사결정을 위한 학문이다.


주장에 대한 근거를 정량화(측정)하기 위해 사용한다.


현재 우리가 측정할 수 있다고 생각하는 것들은 그들을 측정하고자 했던 사람들의 노력에 의한 것이다.


수리통계에서 '어떻게 조금이라도 합리적으로 측정할 것인가?' 를 논의한다.


  - 먼저 event를 어떻게 수에 대응할지를 고민하고, 측정한 여러 대상을 어떻게 요약할지 고민한다.


    요약한 값을 바탕으로 현상의 이상여부를 확률(분포)적으로 판단한다.

    (확률이 낮다고 반드시 아니라고 할 순 없지만, 합리적인 의사결정을 위해 기준을 마련한다.)


    이 모든 과정은 합리적이라고 판단되는 어떤 의도에 의해 시도되며, 그것은 합리적으로 받아들여진다.




위의 의견을 말했지만 학업기간은 이 내용에 충실하지 않았다.


오히려 알고리즘 등 기술적인 부분에 대해서 중요하다고 생각해서 여기에 더욱 관심을 가졌다.


반년 이상 통계를 공부에서 멀어진 후 생각해보니 


알고리즘과 예측력을 공부하는 것보다 중요한 것은 본질적으로 측정에 대한 것이지 않을까? 하는 생각을 하게 된다.


'어떻게 측정할 것인가?'가 결국 이 학문을 아우르는 본질적인 질문이 아닐까 생각해본다.



다시 말하지만, 이것은 사실이 아닌 개인의 의견이다.





R로 csv파일을 불러오다보니 다음과 같은 오류를 마주했다.


> temp <- read.table('Auction_master_train.csv', header=T, sep=',')

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 

  line 1 did not have 41 elements.




우리가 볼 수 있는 대부분의 데이터는 직사각형 형태를 띄고있다.

즉, 모든 행은 같은 개수의 자료 수를 가지고(테이블의 열의 수만큼),

    모든 열 또한 같은 개수의 자료 수를 가진다.(테이블의 행의 수만큼)


위의 명령어는 어떤 데이터를 콤마(,) 를 기준으로 인식해 불러오라는 의미이다.

그런데 자료가 콤마로 구분되어있기는 하지만 자료 안에 정보에도 콤마가 쓰이는게 문제였다.

그래서 R은 특정 행에서 다른 행보다 많은 자료의 개수를 가진다고 인식했으며, 오류라고 출력했다.


header의 개수가 41개인 반면, 첫번째 열은 41개의 자료를 가지지 않는다는 것이다.


최대한 R 내부에서 해결하려고 했으나... 귀찮아서 다른 방법으로 임시 해결하고 넘어가기로 했다.


임시적인 해결 방법은 엑셀에 csv파일을 불러와 자료 안에 콤마로 기록되어있는 부분은 다른 문자로 대체하는 것이다.

다행히 내가 가지고 있던 데이터에는 언더바(_)가 전혀 사용되지 않아 콤마를 언더바로 모두 대체해서 사용했다.

그렇게 read.table( )을 사용하니, 예쁜 직사각형 테이블이 등장했다~. 편-안-...


생각해보면 전에 내가 시험칠 때, 겪었던 문제 또한 이런 것이었던 것 같다.

오랫동안 궁금했든데, 원인을 찾게 되어 다행이다.

물론 내가 사용한 방법은 데이터가 너무 커져 엑셀로 불러올 수 없게된다면 사용하기 힘든 임시방편이다.

다음에 더 편한 방법을 발견하게되면 이 포스팅을 수정하지 않을까...ㅎ



참고로 csv파일을 엑셀로 실행할 때, 또한 인코딩 문제로 한글이 깨질 수 있다.

그때는 메모장으로 csv파일을 실행한 후, "다른이름으로 저장"에서 인코딩을 "ANSI"로 바꾸고 저장한 후, 엑셀로 실행하면 된다.


이상!

'분석' 카테고리의 다른 글

파이썬을 활용한 업무자동화  (0) 2020.06.02
파이썬 이미지 OCR  (0) 2020.05.10
[spark] 스파크 공부하기  (0) 2020.02.13
분석 경험 정리하기  (0) 2019.04.22
Erlang  (0) 2019.04.04


10월 7일 일요일, 2018 캐글뽀개기에 다녀왔다.


행사 위치는 광화문 마이크로소프트 건물 11층에서 진행되었다.

(여기 건물 11층이 너무 멋져서, 이런 곳에서 일하면 정말 좋겠다라고 생각했다... 전망도, 디자인도!)






일요일 아침 10시부터 진행되는 행사라, 사람들이 많이 올까 의아했지만 점심시간이 다 되기전에 세미나 장소는 자리가 꽉차 서서 듣거나, 바닥에 앉아서 듣는 사람들도 많이보였다.


어쨋든 가장 큰 관심은 세미나 내용일테니... 전반적인 컨셉은 "Hello, Kaggler!"였다.


입문 단계에서 흔히 들을 수 있는 "Hello, World!" 문구를 차용해, 다양한 사람들이 캐글에 관심을 가지고 조금 더 쉽게 입문할 수 있도록 도와주려는 의도가 드러나는 컨셉이다.


내년에는 조금 더 advanced 형태의 캐글 관련 세미나를 할 예정이라고 했다.(이름이 생각이나지 않는다...)




내가 들었던 스케쥴은 다음과 같다.


1) 기업현장에서의 데이터 과학

2) Mastering Machine Learning with Competitions

3) R을 shiny하게 하는 shiny

4) 오프라인 비즈니스에서의 데이터 분석과 시각화

5) 기획자의 마음을 움직이는 데이터 시각화

6) 데이터 뽀갠 뒤 챗봇에 반영하기 (feat. BotHub.Studio)

  6-1) 끝나고 잠깐, 리테일 기업의 빅데이터 분석

7) Interactive chart를 이용한 보고서 활용


이었다.


세션 별로 30-60분정도 진했되었고, 1-2는 공통 3부터는 한 타임에 3개의 세션 중 하나를 골라서 듣는 형태로 진행되었다.







내용을 조금씩 요약해보면


1) 기업현장에서의 데이터 과학

  - 대기업에서 Data Transformation(DT)을 실행하고 있는 과정에서 실현 중인 프로세스와 현업부서에 DT의 필요성을 인지시키는 과정


2) Mastering Machine Learning with Competitions

  - 캐글하세요!! 캐글! 캐글!

    

    "나는 캐글이 취미다."

    "하루에 30분만 캐글에 투자해라."


3) R을 shiny하게 하는 shiny

  - 샤이니, 그리 어렵지 않습니다.

    UI와 Server만 알면 됩니다.



4) 오프라인 비즈니스에서의 데이터 분석과 시각화

  - 오프라인 매장에서 비즈니스 인사이트를 잘 발굴한 사례

  - 활용가능한 분석은 좋은 질문에서 출발한다.

  - 시각화는 구성원이 같은 선상에서 문제를 인식하는 것이 중요


5) 기획자의 마음을 움직이는 데이터 시각화

  - 의심

  - 답정너 분석

  - 분석가에게도 기획력이 중요

  - Decision-Driven → Data-Driven


6) 데이터 뽀갠 뒤 챗봇에 반영하기 (feat. BotHub.Studio)

  - BotHub.Studio를 활용해 챗봇 쉽게 만들기

  - 챗봇은 웹과 어플의 중간쯤에 위치

  - 텔레그램에는 봇을 관리하는 봇이 있음


  - 사실, 이전 단계에 자연어처리, 키워드 추출, 로직 설정 등에 대해 알고자하는 마음이 컸는데, 핀트가 다른 곳에 있었음.

  - 그래도 회의실 예약시스템을 만드는 것 관련해서는 생각해볼 요소가 있음


  6-1) 끝나고 잠깐, 리테일 기업의 빅데이터 분석


7) Interactive chart를 이용한 보고서 활용

  - R markdown을 사용해 Interactive 보고서 만들기
  - HTML로 하는 것이 유용 → 실제로 세션에 사용한 강의자료도 markdown을 이용해 만든 HTML 파일
  - 샤이니를 사용하지 않는 이유는 서버를 관리해야 하기 때문

  - 기능 : 원데이터 다운로드 가능하도록 설정 가능
             Drill-down 형태로 차트 제시 가능
  - 그래프 색감 선정하기 참고 : 구글 팔레트







사실 전부터 데이터 분석가를 하겠다, 캐글이 좋은 배움터다, 대학원에 가서 더 공부를 할 것이다 등등 말만 잔뜩하며 실제 공부는 멈추어 있었던 것 같다.


상반기엔 취준이라는 핑계로, 하반기에는 회사를 핑계로...


"지금 당장은 회사에서 R을 이용한 분석이나, 머신러닝을 사용하지 않아!! 그러니까 난 다른 곳에 집중해야해!" 라고 하면서 말이다.


이번 행사를 통해 많은 것을 느꼈고, 마음을 다잡을 수 있었다.


강연해주신 분들, 행사에 참석해서 열심히 공부하는 모습들을 보며 자극을 받았고,


"하루에 30분만 캐글에 투자하라."라는 말을 듣고, 아... 내가 계속 미루고만 있었구나... 라는 생각도 많이 했다.


물론 아직도 다른 할 일이 태산이라고 생각하지만, 언젠가 해야할 공부라고 생각한다면 영어든, 분석이든, 통계든 오늘 하지 않으면 절대 못할 것이다.


전부터 했던 생각과 더불어


반드시 이루고 싶은 일을 정하고,


그에 따라 계획을 장기적으로 디자인하고


매일매일 조금씩 정진할 수 있도록 계획을 관리하는 것이 중요하다는 것


다시 한 번 깨달았고, 오늘부터 꼭 실천해야겠다고 생각했다.


이런 좋은 행사를 만들어 주신 운영진, 자원봉사자, 강연자 분들께 감사의 마음을 전달하고 싶다.


내년 행사 때도 반드시 가고 싶다!




구분 

표현식 

내용 

 알파벳 or 

숫자 텍스트

[[:digit:]]

 숫자 텍스트 

[[:lower:]] 

 소문자 알파벳 텍스트 

[[:upper:]]

 대문자 알파벳 텍스트 

[[:alpha:]] 

 대/소문자 알파벳 텍스트 

[[:alnum:]] 

 숫자 or 대/소문자 텍스트 

 알파벳이나 숫자가

아닌 텍스트

[[:punct:]] 

 구두점으로 표시된 텍스트

(쉼표 or 마침표 등) 

[[:gragh:]]

 [:alnum:] or [:punct:]

[[:black:]] 

 스페이스나 탭 등의 공란 텍스트 

[[:space:]]

 스페이스, 탭, 줄바꿈 등의 텍스트 

[[:print:]] 

 출력했을 때 확인할 수 있는 텍스트

[:alnun:] or [:punct:] or [:space:]

그 외 

 [[:cntrl:]]

 제어문자(control characters)로 표현된 텍스트 

[[:xdigit:]] 

 16진법을 따르는 텍스트 

 양화기호

 ?

 선행 표현을 고려할 수도, 고려하지 않을 수도 있으며 최대 1회 매칭됨 

 *

 선행 표현이 0회 혹은 그 이상 매칭됨

 +

 선행 표현이 1회 혹은 그 이상 매칭됨 

 {n}

 선행 표현이 정확하게 n회 매칭됨

 {n,}

 선행 표현이 n회 이상 매칭됨 

 {n,m}

 선행 표현이 n회, 이상 m회 미만 매칭됨  

 기타

\w 

 숫자 혹은 알파벳으로 표현된 모든 단어

 \W

 \w 제외 

\d 

 숫자로 표현된 모든 텍스트

 \D

 숫자로 표현된 모든 텍스트 제외

 \s

 공란으로 표현된 모든 텍스트 

 \S

 공란으로 표현된 모든 텍스트 제외 

 \b

 특정 표현으로 시작되거나 종결된 모든 텍스트

 \B

  특정 표현으로 시작되거나 종결되지 않은 모든 텍스트



참고) R을 이용한 텍스트 마이닝 - 백영민 지음 (한울아카데미)

이전에 우리는 ANOVA, 카이제곱 적합도 검정, 선형회귀분석 등의 방법으로 커피/프림/설탕의 섭취가 비만에 미치는 영향을 살펴보았다.


이번에는 커피 섭취 빈도가 비만에 미치는 영향을 로지스틱 회귀분석을 통해서 알아보자.





0. 로지스틱 회귀분석이란

  - 보통의 선형회귀모형은 Y(반응변수)가 연속형 변수여야한다. (오차항의 정규성 가정 때문)

    하지만 현실에서는 그렇지 못한 경우가 많은데, 대표적인 경우 고객 이탈, 발병 유무 등의 자료이다.

    이 경우 Y값은 0 또는 1을 갖는다.


    로지스틱 회귀분석은 이러한 경우에 Y가 어떠한 이항분포를 따른다고 가정하고 모형을 세우는 것이다.

    자세한 수식은 생략한다.




1. 변수 설정

   1) 앞서 언급한대로 로지스틱 회귀분석을 위해서는 반응변수(Y)가 이진 자료의 형태를 따라야 한다.

       따라서 우리가 원하는 기준변수인 HE_BMI를 기준에 따라 비만과 정상으로 분류하자.

   2) 커피 섭취 빈도는 총 9개의 범주를 가진다. 이를 적절히 묶어 범주를 줄여서 모형을 적합한다.


 변수

조건 

코딩 

 HE_BMI

25 이상

1 (비만)

25 미만

0 (정상) 

FF_COFFEE 

주1회이내 

주6회이내 

일2-3회 

3


빈도는 다음과 같다.


 주1회이내

주6회이내 

일2-3회 

 계

 641

 806

 1099

 2546






2. 모형 적합 및 결과 해석

  - 별도의 통제변수 없이 SPSS를 통해 "이분형 로지스틱" 모형을 적합한다.





    1) 유의수준 0.05에서 각 회귀계수가 모두 유의함을 확인할 수 있다.




3. 오즈비 추정


 

 

 섭취 빈도

 

 주1회이내

주6회이내 

일2-3회 

 비만여부

(HE_BMI >= 25)

 커피

 1

(기준)

1.294

(1.031-1.625) 

1.524

(1.232-1.885) 

 믹스

1

 1.076

(0.854-1.356)

 1.397

(1.156-1.688)

     

* 믹스에 대해서도 분석을 실시하여 결과를 정리했다.


  - 기준이 "주1회이내"이기 때문에 해당 칸은 1로 나타내었다.

  - 각 칸은 "주1회이내"에 대한 해당 칸의 오즈비 추정값을 구한 것이다.

  - ( ) 안에는 신뢰구간을 의미한다.


  - "주6회이내", "일2-3회" 모두 신뢰구간이 1을 포함하지 않으므로 효과가 유의하다고 할 수 있다.






4. 결론


  - 커피와 프림 모두 일일 2-3회 정도로 많이 마신다면 비만에 대해 더 큰 오즈를 갖는다.


( 발병률이 아주 낮은 사례의 경우 오즈비를 근사적으로 상대위험과 동일하게 생각할 수 있지만,

  이 때 오즈는 상대위험과 동일하게 생각하기 힘들다.)

1. 

https://shiring.github.io/machine_learning/2017/01/15/rfe_ga_post

  - 데이터셋에 대한 다양한 변수선택 방법과 그 비교

  - 누군가 한글로 rough하게 번역해둔 페이지도 있었던 것 같음.

  - Boruta Feature Importance는 무엇...



2. https://www.youtube.com/watch?v=ClAZQI_B4t8

  - Winning Data Science Competitions: Jeong-Yoon Lee

   - 말그대로 데이터사이언스 대회 관련한 팁이 담긴 1시간 30분짜리 영상

   - 단, 전부 영어..


+ Recent posts