ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [혼공학습단 9기]혼자 공부하는 데이터 분석 with 파이썬 챕터 7. 검증하고 예측하기
    카테고리 없음 2023. 2. 26. 23:58

     

    비록 혼공학습단 미션은 다 끝이 났지만! 유종의 미를 거두기 위해 마지막 챕터 7.검증하고 예측하기를 공부해 보았습니다.

     

    지금까지 데이터를 수집하고 탐색하고 시각화하는 방법들을 알아보았는데 이 장에서는 데이터에서 어떠한 의사 결정을 끌어내는 지 방법과 미래 예측방법을 알아보았습니다.

     

    07-1. 통계적으로 추론하기

    책내용으로는 도서명에 '파이썬'이란 명칭을 넣으면 책이 더 많이 팔릴까(대출될까)라는 가정을 가설검정과 순열검정으로 검정합니다.

     

    < 모수검정>

    - 모수검정

    모집단에 대한 파라미터를 추정하는 방법을 모수검정이라고 합니다. 여러 데이터를 한 눈에 평균에서의 거리를 파악할 수 있도록 표준점수,z점수를 사용합니다. 모수검정은 모집단의 데이터에 대해 어떤 가정을 전제로 하고 수행되는 경우가 많습니다. 예를 들어 전체 청소년의 몸무게가 정규분포를 따른다고 가정하는 거죠. 실제로 전체 데이터를 알지 못하지만, 자연 세계의 데이터는 정규분포를 따르는 경우가 많기 때문입니다.

    - z 점수(표준점수)

    데이터가 정규분포를 따른다고 가정하고, 각 값이 평균에서 얼마나 떨어져 있는지 표준편차를 사용해 변환한 점수를 표준점수 또는 z점수라고 합니다. 여러데이터의 표준편차를 보여주기는 어려움이 있기에 이를 하나의 단위로 표현 합니다. 여기서 x는 구하려는 샘플 수치이고 u는 평균, 분모항은 표준편차를 나타냅니다.

    z점수는 직접 수식을 입력하거나 사이파이(scipy)패키지로 더 쉽게 구할 수 있습니다.

    - 표준정규분포

    평균이 0이고 표준편차가 1인 정규분포를 표준정규분포라고 합니다. z점수 공식에 대입하면  z= x입니다. norm.cdf,ppf메소드로 표준정규분포에서의 비율, z점수를 구할 수 있습니다.

    - 중심극한정리

    중심극한정리란 무작위로 뽑은 표본의 평균은 정규분포에 가깝다는 이론입니다.

     

    40개씩 1000번의 횟수로 샘플의 평균을 히스토그램으로 그려보면 아래와 같이 정규분포처럼 나타나는 것을 확인 할 수 있습니다.

     

    샘플의 평균과 모집단의 평균은 소수점 첫번째자리까지 같습니다. 샘플갯수가 늘어나면 모집단 평균에 가깝습니다. 또한 샘플의 표준편차는  모집단의 표준편차를 표본갯수의 제곱근으로 나눈 것과 비슷합니다. 이렇게 구한 표준편차는 '표준오차'라고 합니다.

     

    - 모집단의 평균 범위 추정하기 : 신뢰구간

    <모집단 평균 구하기 계산식>

     

    z점수와 중심극한정리를 연결하여 모집단의 평균을 추정할 수 있습니다. 위 계산식을 보면 표본의 평균에서 z점수와 표준오차를 곱한 값을 빼서 모집단의 평균을 구합니다. 위 계산식으로 계산한 결과로 '모집단의 평균이 13.2에서 16.3사이에 놓여 있을 거라 95% 확신한다'라고 말합니다. 여기서 퍼센테이지를 올리면 값의 범위가 늘어나니 정확도가 떨어진다. trade off가 있는 것으로 보입니다.

     

    - 가설검정 

    가설검정은 표본에 대한 정보를 사용해 모집단의 파라미터에 대한 가정을 검정하는 것. 두 모집단의 평균이 같으면 영가설 또는 귀무가설, 같지 않을 때 대립가설이라고 합니다.

     

    - 정규분포가 아닐때 가설 검증하기 : 순열검증


    순열검정은 모집단의 분포가 정규분포를 따르지 않거나 모집단의 분포를 알 수 없을 때 사용 할 수 있는 방법입니다. 비모수검정방법이라고 합니다. 두 표본의 평균의 차이를 계산한 후 두 표본을 섞고 무작위로 두 그룹으로 나눕니다. 크기는 동일하게 만듭니다. 이렇게 나눈 두그룹을 다시 평균 차이를 구합니다. 여러번 반복 후 그룹의 평균 차이보다 크거나 작은 경우를 헤아려 p-값을 계산합니다

    permutation_test 메소드 실행 결과 두번째 데이터가 p-값인데, 0.03보다 작으므로 두 도서의 평균 대출건수에는 차이가 있다고 결론을 내릴 수 있습니다.

     

     

    07-2 머신러닝으로 예측하기

     

    - 알아 두면 좋은 머신러닝 용어

    머신러닝 : 인공지능 분야의 한 하위분야 지도학습과 비지도 학습이 있다.

    지도학습 : 데이터에 정답이 있는 경우. 이런 정답을 타겟이라고 함. 타겟을 맞추기 위해 사용되는 재료를 입력이라고 함. 이렇게 입력과 타깃이 들어있는 데이터를 사용해 모델을 훈련한 후, 새로운 입력에 타깃을 예측하는지 확인하는 학습.

    비지도학습 : 입력데이터는 있지만 타겟이 없는 경우. 머신러닝을 이용하여 의미있는 패턴을 찾는 학습방법.

    모델 : 추상적으로 특정 알고리즘. 구체적으로는 머신러닝으로 학습된 패턴을 저장하는 소프트웨어 객체.

     

    - 모델 훈련하기

    모델을 훈련을 하면 이 모델이 잘 동작하는 지 테스트를 해봐야 합니다. 그러기 위해서는 새로운 데이터로 테스트를 해야 합니다. 기존데이터로 하는 테스트는 의미가 없으니깐요.(세상 모든 입력을 저장해놓은다면 가능하겠지만..) 그래서 훈련용 데이터로 훈련세트,테스트데이터로  테스트세트로 나눠서 학습을 합니다. 테스트 데이터는 20~25%를 차지합니다. 

     

    - 훈련세트와 테스트 세트 나누기

    실습데이터는 계속사용해왔던 ns_book7 데이터입니다. 보통 데이터는 무작위로 섞은 후 샘플을 훈련 세트와 테스트세트로 나눕니다. 

    사이킷런에서 제공하는 train_test_split 메소드를 이용하면 75% 훈련세트, 25% 테스트세트로 나눠 줍니다. 그리고 아래 X_train변수처럼 열을 리스트로 감싸면 2차원배열의 데이터프레임이 됩니다. y_train은 1차원 시리즈 객체입니다. 이렇게 데이터형태를 나눈이유는 사이킷런에서 타겟은 1차원, 입력은 2차원배열을 기대하기 때문입니다.

    - 선형 회귀 모델 훈련하기

    linear_model모듈 아래 LinearRegression클래스의 fit()메소드에 X_train(타겟),y_train(데이터)를 전달하면 선형회귀 모델로 훈련을 시킵니다.

     

    연속적인 값 예측하기 : 선형 회귀

    선형회귀는 선형함수를 사용해 모델을 만든느 알고리즘입니다. 

     

                                                                                       y = a*x + b

     

    여기서 x는 입력이고 y는 타겟입니다. 입력에 기울기 a를 곱하고 y축과 만나는 절편 b를 더ㅎ여 예측을 만드는 것이 바로 선형회귀 알고리즘 입니다. 위 fit메소드에서 학습한 것이 이 기울기 a와 절편 b입니다.

     

     

     

     

    - 훈련된 모델을 평가하기 : 결정계수

    사이킷런의 머신러닝 모델은 score메서드를 제공하는 데 이 메서드로 머신러닝 모델이 얼마나 유용한지를 평가할 수 있습니다. 이를 결정계수라고 하는 데 0~1의 값으로 아래 출력이 0.1이므로 이 모델은 별로 유용하지 않습니다.

     

     

    - 카테고리 예측하기: 로지스틱 회귀

    지도학습 중 타깃이 연속적인 실수인 경우 회귀, 어떤 종류의 카테고리인 경우는 분류라고 합니다. 이는 스팸메일 예시처럼 두 개의 카테고리로 구분하는 경우(스팸이냐, 정상메일이냐)를 이진분류, 사진 샘플 예시같이 세 개이상의 카테고리로 구분하는 경우를 다중분류라고 합니다.

    그리고 이러한 타깃의 카테고리를 클래스라고 하고 이진분류에서는 음성클래스, 양성클래스라고 부릅니다. 

    분류알고리즘 중 대표적인 알고리즘은 로지스틱 회귀입니다. 이는 선형함수를 사용하지만 그전에 로지스틱함수(시그모이드함수)를 통해 0~1의 값으로 바꾸고 이를 이용하여 분류를 하는 알고리즘입니다.

     

     

    - 로지스틱 회귀 모델 훈련 하기

    여기서 문제를 전체 대출건수 평균보다 높은지 아닌지를 판단하는 문제로 바꾸겠습니다.

    LogisticRegression클래스를 이용하여 회귀 모델 훈련처럼 fit메소드로  훈련이 가능합니다. 여기서  score는 정확도를 나타냅니다. 71%입니다.

    다만, 실제 y_test_c의 양,음클래스의 비율은 정확히 반반이 아니고 음성클래스가 69%입니다. 따라서 모든걸 다 음성클래스라고 예측해도 69%는 맞는 다는 거죠. 그래서 71%는 높은 수치가 아닙니다.

     

    사이킷런에서 가장 많은 클래스로 무조건 예측을 수행하는 더미모델을 제공합니다. 회는 DummyRegressor, 분류는 DummyClassifier모델이 있습니다.

    69% 정확도가 나왔는데 이 값이 모델을 만들 때 기준점이 됩니다. 적어도 이 점수보다 낫지 않다면 유용하지 않습니다.

     

     

    자, 요번장은 모집단 추론, 머신러닝 지도학습으로 간단한 모델을 만들어 보았는데 정말 매우 일부만 배운 느낌입니다. 수학/통계적, 머신러닝기법등을 더 깊게 안다면 굉장히 재미있는 분야일 것같네요. 다만 그렇게 내가 시간투자를 할 수 있을지.. ㅎㅎ

Designed by Tistory.