[Day 17] 통계분석 기초

임종우·2022년 10월 9일
1

ai_school_TIL

목록 보기
14/34

22.10.07
앞으로 공부하는데 필요할 각종 통계 지식을 배우는 시간이었다.
집중하지 못한 것 같아 아쉬움이 있지만, 그래도 배운 것들이 있다!


통계를 통해 무엇을 할 수 있는가?

  • 대상의 특성을 수치로 표현하기
    양적이든 질적이든 가능, 객관적인 수치가 아니어도 됨. 수치가 대상을 파악하기에 좋은 성질을 가지고 있어야 함.

  • 부분을 통해 전체를 추측하기
    대부분의 경우 대상의 일부만을 관찰할 수 있으므로, 전체를 추측해야 함. 합리적으로!

  • 비교하기
    여러 개의 대상을 비교 (A/B 테스트 등) 대상들 사이에 어떤 차이가 있는지, 그게 정말로 존재하는 것인지, 대상들 자체의 특성에 기인한 것인지.

  • 예측하기
    어떤 특성은 다른 특성보다 쉽게 알 수 있다. 한 대상의 여러가지 특성들은 서로 관련을 맺고 있으므로, 쉽게 알 수 있는 다른 특성으로부터 알기 어려운 특성을 예측할 수 있다. 미래에 대한 예측만을 의미하는 것은 아님. 미래는 어렵다!

  • 영향력을 미치는 변수 찾기
    대상의 한가지 특성은 여러가지 특성으로부터 영향을 받고, 어떤 특성은 다른 특성보다 직접적으로 변화시키기 쉽다. 목적으로 하는 특성에 영향이 큰 변수를 분별하여 해당 변수를 조절해 목적으로 하는 특성을 조절할 수 있다.

  • 지수(index)만들기
    대상의 특성 중에는 직접적으로 관찰하기 어려운 것이 있음. 이러한 특성(만족도)은 관찰 가능한 다른 특성들(재구매, 추천 등)과 연관을 맺고 있음. 관찰가능한 특성들을 바탕으로 관찰하기 어려운 특성을 지표화할 수 있다! 이런 지표를 통해 관찰하기 어려운 대상을 통계적으로 다룰 수 있다.
    대상 자체가 실재하지 않는다 해도(고객 만족도 등) 이 지표를 통해 의사결정이 쉬워진다.

  • 비슷한 것끼리 모으기
    비슷한 것을 모아서 하나의 집단으로 인식하면 편리한 경우가 있다. 대상의 다양한 특성들을 바탕으로 비슷한 것끼리 모을 수 있다. 뭐 RFM segmentation 같은 것도 이런 예시다.

변수의 종류

  • 데이터를 표로 정리하기
    행 : 표에서 가로 방향 한 줄, 하나의 사례
    열 : 표에서 세로 방향 한 줄, 하나의 변수

  • 범주형 변수
    종류, 이름 등에 해당
    숫자로 표시하더라도 양적인 개념이 아님 -> 연산을 하면 오류만 나고, 아무런 의미가 없음
    덧셈 등 대부분의 연산이 의미가 없음
    순서가 있을 수도 있으나, 간격이 일정하지 않음
    주거형태, 고향, 학력, 출석, 주민번호 등

  • 수치형 변수
    중 연속형 변수
    연속적인 형태, 간격이 일성하고 덧셈 뺄셈 등의 연산이 의미가 잇음
    무게 나이 시간 거리 자녀의 수, 시험 점수 등

범주형인지 연속형인지 애매하면, 평균을 내보았을 때 말이 되는지 판단하면 된다!!!! 주민번호 1과 3을 평균내면 2다? 이상하다! -> 범주형

통계의 종류

  • 기술 통계 : 데이터를 묘사, 설명(description,describe). 통계낸다의 그 통계
  • 추론 통계 : 데이터를 바탕으로 추론, 예측

기술통계

  • 중심 경향치 : 데이터가 어디에 몰려있는가? 평균, 중간값
  • 분위수 : 데이터에서 각각의 순위가 어느 정도인가?
  • 변산성 측정치 : 데이터가 어떻게 퍼져있는가? 범위, IQR, 분산, 표준편차
  • 평균(mean)
    N개의 값이 있을 때, 그 합계를 N으로 나눈 것
    극단값에 따라 영향을 크게 받음

  • 중간값(median)
    값들을 크기 순으로 정렬했을 때 중간에 위치한 값
    중위수라는 표현도 많이 사용(중위소득 등)

  • 최빈값(mode)
    가장 많은 사례에서 관찰된 값
    연속 변수보다는 범주형 변수에서 유용
    연속 변수의 경우 구간을 나누어 최빈값을 구하는 경우가 많음

  • 파이썬에서 분석하기
    판다스를 활용한다. 데이터프레임의 메소드로 계산할 수 있다.
    - 평균
    df.price.mean()
    - 중간값
    df.price.median()
    - 최빈값
    df.model.mode()
  • 분위수(quantile)
    크기순으로 정렬된 데이터를 q개로 나누는 위치의 값
    - 사분위수(quartile)
    데이터를 4등분하는 위치. 1분위수 : 25프로, 3분위수 : 75프로
    - 백분위수(percentile)
    데이터에서 순위를 퍼센트로 표현 0퍼센타일(최솟값) ~ 100 퍼센타일(최댓값)

  • python에서 실습!
    df.min(), max(), quantile(.25) : 25퍼센트

  • 범위 (range)
    최대값 – 최소값
    극단값이 있으면 커짐
    -> 사분위간 범위(IQR) : 양쪽 끝을 잘라내겠다. (InterQuartile Range) -> 극단값의 영향 줄임
    == 제 3분위수 – 제 1분위수

  • 편차
    값 – 평균

  • 분산 (var)
    편차 제곱의 평균(편차의 평균은 0이 되므로)

  • 표준편차 (std)
    분산의 제곱근

  • python에서 실습!
    df.var(), std()

추론통계

  • 모집단과 표본
    - 모집단(population) : 연구의 관심이 되는 집단 전체
    - 표본(sample) : 특정 연구에서 선택된 모집단의 부분 집합(우리가 가지고 있는 데이터셋)

  • 모수 (population parameter)
    - 파라미터 : 어떤 시스템의 특성을 나타내는 값 (연비, 무게 등이 자동차의 parameter)
    - 모수 : 모집단의 파라미터 -> 모집단의 특성을 나타내는 값 (예시 : 모평균, 모분산)

  • 통계량 (sample statistic)
    - 표본에서 얻어진 수로 계산한 값(통계치)
    - 표본평균, 표본분산 등

모집단에서 구한 값은 모수, 표본에서 구한 값은 통계량이라고 부른다.

  • 표집(sampling)
    모집단에서 표본을 추출하는 절차, 표본 추출이라고도 함

  • 추정(estimation)
    통계량으로부터 모수를 추측하는 절차!
    하나의 수치로 추정하는 점 추정(추정 결과가 수치 하나)과, 구간으로 추정하는 구간 추정이 있다.

구간 추정 방법에 대해 알아보자.

  • 신뢰구간

    • 대표적인 구간 추정 방법
    • 모수가 있을 법한 범위로 추정
    • 신뢰구간 = 통계량 +- 오차범위
    • 95% 신뢰구간 = 95%(신뢰수준)의 경우에 모수가 추정된 신뢰구간에 포함됨
  • 신뢰수준

    • 신뢰구간에 모수가 존재하는 표본의 비율
      신뢰수준이 높음 -> 많은 표본을 포함 -> 더 넓은 오차범위 -> 정보가 적음
      신뢰수준이 낮음 -> 적은 표본이 포함 -> 더 좁은 오차범위 -> 정보가 많음
      신뢰수준이 100% ? 이럴수도 있고 저럴수도 있다. (모든 범위가 가능!)
    • 신뢰구간이 좁으면 신뢰수준이 낮으므로 타협이 필요
    • 모든 통계량에는 신뢰구간이 존재, 그러나 복잡함
    • 평균의 경우 신뢰구간을 간단하게 구할 수 있음
    • 평균이 아닌 중간값, 최빈값등은 부트스트래핑이라는 시뮬레이션 기법을 사용해서 신뢰구간을 추정한다.
  • 신뢰구간에 영향을 주는 요소

    • 신뢰구간이 좁을수록 예측된 모수의 범위가 좁으므로 유용
    • 신뢰구간을 좁히려면? 표본의 크기를 키운다! == 데이터를 많이 모은다!
  • python 실습
    pingouin을 설치하여 이용한다.

pip install pingouin
import pingouin as pg
pg.ttest(df.price, 0, confidence = 0.95)
>>>
		T			dof		alternative		p-val			CI95%				cohen-d			BF10			power
T-test	42.483582	273		two-sided		2.486212e-122	[814.1, 893.22]		2.566527		2.773e+118		1.0

부스트스트래핑의 경우 scipy를 활용한다.

import numpy as np
import scipy

scipy.stats.bootstrap([df.price],np.median, confidence_level = 0.95)
>>>
BootstrapResult(confidence_interval=ConfidenceInterval(low=770.0, high=860.0), standard_error=22.479610623773738)

통계적 가설 검정

  • 반증주의 철학에 기반하고 있다. 말도 안되는 주장이 있다면 증거를 통해 반박해야한다.
  • 일반 과학이 증거를 통해 이론을 입증하는 거라면, 반증주의에 기반한 것은 증거를 통해 이론을 반박한다.
  • 귀무가설과 대립가설
    - 귀무가설 (H0) : 기각하고자 하는 가설. 특별한 증거가 없으면 참으로 간주
    - 대립가설 (H1) : 주장하고자 하는 가설, 충분한 증거를 통해 귀무가설을 기각해야만 채택 가능
  • 통계적 가설 검정의 순서
    - 귀무가설 수립 -> 검정 -> 유의수준(보통 0.05)보다 p값이 작다면 귀무가설 기각 및 대립가설 채택
    만약 p 값이 유의수준보다 크다면? - 만약 귀무가설이 기각되지 않는다면 데이터를 더 모아서 재도전하던지, 결론을 유보한다.
    -> 귀무가설을 인정하지는 않는다.
  • p값(p-value)
    귀무가설을 바탕으로 데이터에서 관찰된 결과와 그 이상의 극단적 결과가 나올 확률을 계산한 것
    유의 수준 = 100% - 신뢰수준이다.

  • 가설 검정의 결과 중 오류

    • 참인 귀무가설을 잘못해서 기각해버림 : 1종 오류
    • 거짓인 귀무가설을 기각하지 못함 : 2종 오류
    • 귀무가설이 참일경우, 1종 오류는 유의수준만큼 발생한다.
    • 유의수준을 낮추면 1종 오류가 감소하고, 2종 오류가 증가한다.
  • python에서 통계적 가설검정
    아까 썼던 pinguoin의 pg.ttest를 사용한다.
    인자로 귀무가설의 값을 넣는다.
    예를들어 귀무가설이 모평균 = 900 이라면, 다음과 같이 사용한다.
pg.ttest(df.price , 900, confidence=0.95)

상관계수

  • 두 변수의 연관성을 -1 ~ +1 범위의 수치로 나타낸 것
  • 두 변수의 연관성을 파악하기 위해 사용
  • 상관계수의 해석
    - 부호
    + : 두 변수가 같은 방향으로 변화
    - : 두 변수가 반대 방향으로 변화
    - 크기
    0 : 두 변수가 독립적임. 전혀 상관 없음
    1 : 한 변수의 변화와 다른 변수의 변화가 정확히 일치
  • 상관계수와 인과관계
    두 변수의 상관계수는 인과관계를 담보하지 않는다.
    도시 내 범죄 건수와 종교시설의 수는 양의 상관계수가 있는데, 인과관계는 없다.
    인구가 많아지면 범죄도 늘고 종교시설도 많아지므로!
  • Pvalue vs 상관계수
    상관계수가 커지면 pvalue가 작아진다.

  • python에서?
    pingouin의 corr 혹은 pandas의 corr를 사용한다.

pg.corr(df.price, df.mileage)

를 통해 price 변수와 mileage 변수 사이 상관관계를 파악할 수 있다.

회귀분석

  • 지도학습 : 독립변수 x를 이용하여 종속변수 y를 예측하는 것
    독립변수란, 예측의 바탕이 되는 원인 혹은 입력 값을 의미
    종속변수란, 예측의 대상이 되는 결과 혹은 출력 값을 의미

  • 지도학습에서 종속변수가 연속인 경우 회귀분석이고, 범주형인 경우 분류분석이다.

  • 예측값 – 실제값으로 회귀분석의 정확성을 계산한다.

  • 선형 모형 : 직선의 방정식 이용. y^ = wx + b

  • python에서의 회귀분석
    statsmodels 모듈을 사용한다.

from statsmodels.formula.api import ols
m = ols("price ~ mileage", data = df).fit()
m.summary()

ols 함수 내에서, 종속변수 ~ 독립변수의 형태로 작성하면, 회귀분석의 모형이 되는 관계식을 의미한다.
다음과 같이 여러 변수를 설정할 수도 있다.

m = ols("price ~ model + mileage + year", data = df).fit()
m.summary()

이렇게 다중 변수에 대한 회귀분석도 시행할 수 있다.

범주형 변수에 대한 회귀분석도 사용할 수 있다.

m = ols("price ~ model", data = df).fit()
m.summary()

수치형 변수와 똑같이 사용한다. 이때, 회귀분석이 진행되는 방법이 좀 다르다.
dummy변수를 활용하여 회귀분석이 진행된다.
dummy변수란, 독립변수를 0이나 1의 값으로 표현한 변수를 의미한다.
범주가 두개(avante, k3)인 범주형변수 model에 대해 회귀분석을 진행할때, dummy변수 model[T.K3]가 생성되어 k3이면 1, avante이면 0이 되어 어떤 범주에 속하는지를 표현하게 된다.

범주형 변수에 범주가 k 개 있을 경우, k-1개의 더미 변수를 투입하여 어떤 범주에 속하는지를 표현할 수 있다.


수업에서 배운 내용은 여기까지! 데이터 분석을 위해 필요한 여러 기초적인 통계 지식을 배웠다.
그런데 자료가 너무 좋은데.. 내용도 많고... 못 배운 내용들이 많아서 아쉬웠다.
그래서 한 번 읽어나 봤다.
이해는 못하겠더라!

건너 뛴 내용들

  • A/B test
    고객들에게 서로 다른 웹 페이지나 광고를 보여주고 목표 지표(예 : 전환율)를 측정
    작은 실험을 자주, 많이 해야 한다
    당연하거나 터무니 없어보이는 아이디어도 실험할 필요

  • 집단 비교 통계 처리 중
    - t-test
    두 집단의 평균이 같은지 다른지를 판단한다.
    이걸 좀 자세히 배워보고 싶었는데 아쉽다 ㅠㅠ
    - 분산 분석
    집단 간 분산과 집단 내 분산의 비교를 통해 각 집단의 평균에 차이가 있는지를 검정
    이거랑 t검정이랑,, 뭔지 전혀 모르겠다!

  • 여러가지 상관계수
    피어슨, 스피어만, 켄달 등 다양한 사람들이 상관계수를 정의하였다.
    가장 대표적인 것은 피어슨의 상관계수로, 공분산을 두 변수의 표준편차의 곱으로 나눈 것이다.
    공분산은 두 변수의 편차의 곱을 n-1로 나눈 것이다.

  • 잔차와 최소제곱법(Least square)
    잔차란, 실제값과 예측값의 차이를 의미한다.
    잔차분산은 잔차를 제곱하여 평균낸 것이다. 잔차분산이 크다는 것은 예측이 잘 맞지 않다는 것이다.
    따라서, 최소제곱법을 활용한다. 최소제곱법은 잔차 분산이 최소가 되게 하는 계수를 추정하는 방법이다.
    가장 널리 사용되는 추정 방법이다.

  • 예측
    회귀분석을 통해 만든 모형을 이용하여 다른 입력값에 대해 결과값을 예측할 수 있다.

  • R squared
    회귀분석에서 예측의 정확성을 판단하기 쉽게 만든 지표
    1에 가까울 수록 y를 정확하게 예측할 수 있다.

  • 표준화
    다중 회귀분석에서 독립변수의 단위가 달라, 종속변수에 대한 영향력을 비교하기가 어렵다. 따라서 표준화를 통해 평균 = 0 표준편차 = 1이 되게 만들어주어 변수의 단위를 제거, 상대적인 영향력을 비교할 수 있다.
    (x - 평균) / 표준편차

  • overfitting(과적합)
    주어진 표본에 가장 잘 맞는 계수를 추정하였기 때문에, 지나치게 주어진 표본에만 맞는 변수를 추정할 경우 모집단의 계수와 다를 수 있다.
    독립변수의 개수에 따라서 R값이나 잔차분산이 달라지므로, 수정된 R제곱 값을 사용하기도 함.

  • 교차 검증
    훈련 데이터셋으로 추정 후, 테스트 데이터셋으로 예측 성능을 검증하는 방법. LOOCV, k-fold 등 다양한 방법이 있다.
    교차 검증의 결과 훈련오차와 테스트 오차를 비교하여 모델을 어떻게 수정해야할지 결정할 수 있다.

  • 단계적 회귀분석
    독립변수를 하나씩 추가 혹은 제거하며 종속변수를 잘 예측하는 변수들을 선택하는 기법
    통계적으로 유의한 예측변수들만을 골라낼 수 있다.
    독립변수를 하나씩 추가하는 전진 선택과, 하나씩 제거하는 후진 선택이 있다.

  • 변수의 변형
    변수에 로그함수를 취해주는 등의 방법으로 비선형 변환을 하여 선형 모형의 한계를 일부 극복할 수 있다.
    2차항을 추가할 수도 있으며, 절편을 없앨 수도 있고, 절편을 이동시킬 수도 있다.

  • 다중공선성(multicollinearity)?
    독립변수들 사이에 서로 예측가능한 관계들이 있는 경우, 추정치가 불안정해질 수 있는 문제
    이런 경우 데이터를 더 모으거나, 다중공선성 문제를 일으키는 변수를 제거하는 등의 행위를 해준다.
    분산팽창계수(VIF)를 통해 다중공선성을 판단할 수 있다.
    이는 하나의 독립변수를 다른 독립변수들로 회귀분석한 값을 이용한다.
    - 조건수
    입력의 변화에 따른 출력의 변화를 나타내는 수
    - 센터링
    평균을 빼 주는 것. 변수를 변환하기 전에 센터링을 하면 다중공선성을 완화할 수 있다.

  • 로지스틱 회귀분석??
    0과 1사이의 값을 가지는 로지스틱 함수를 이용해 회귀분석을 진행한다. 로지스틱 함수 𝜎(z) = 1 / (1 + e^-z)
    로지스틱 회귀분석은 𝑦=𝜎(𝑤𝑥+𝑏)의 형태이다.

  • 승산
    p/(1-p)
    logit : 로그 승산 log(p/(1-p))

  • 한계 효과
    x의 추가 변화에 따른 y의 추가 변화.
    선형모형에서는 한계효과가 기울기인 w로 일정하지만, 로지스틱 회귀분석에서는 x에 따라 다르다. 반면 로짓의 한계 효과는 일정하다.
    wx + b = 0 일때, 한계효과가 가장 크다.

  • 로지스틱 회귀분석의 적합도 지수
    다양한 값을 이용해 구할 수 있다. 로그우도, 이탈도, AIC, BIC 등이 있다.

  • 우도
    특정한 추정치에서 관찰된 데이터가 나올 확률

  • 혼동 행렬
    실제 값과 예측 값을 구분하여 평가하기 위한 표 느낌.
    예측을 기준으로 True가 양성, False가 음성이고
    예측이 맞다면 진, 틀리다면 위를 붙인다.
    따라서 진양성, 진음성, 위양성, 위음성으로 나눌 수 있다.
    정확도는 예측이 맞은 비율
    정밀도는 양성 예측 중에 맞은 비율을 의미한다.
    재현도는 실제 양성 중 찾아낸 비율을 의미한다.
    특이도는 실제 음성 중 찾아낸 비율을 의미한다.
    정밀도와 재현도의 조화평균은 F1이라고 한다.
    위 값들은 모두 문턱값을 조절함에 따라 달라진다.
  • ROC 곡선
    가로축은 1-특이도, 세로축은 재현도로 하여 그린 곡선. 문턱값을 변화시키며 특이도와 재현도의 변화를 표시한다.
  • 정칙화(regularization)
    일반화 오차를 줄이기 위한 기계학습의 모형이나 알고리즘의 수정

  • 노름(Norm)
    길이 또는 크기를 일반화한 개념. p값에 따라 형태가 달라지는 Lp노름

  • L1 정칙화
    손실함수에 파라미터의 L1노름을 추가한다. LASSO. 가중치를 0으로 만드는 경향이 강하다.

  • L2 정칙화
    손실함수에 파라미터의 L2노름을 추가한다. RIDGE. 혹은 Weight Decay. 가중치를 전반적으로 작게 만드는 경향이 강하다.

  • 상호작용
    두 독립변수의 곱으로 이루어진 항. 기울기나 절편을 변화시킨다.

  • 인과효과
    횡단비교, 종단비교, 이중차분법(대조군이 없을 때 종단비교를 비슷한 집단 B의 종단비교와 횡단비교한다.)
    횡단비교는 동일 시점에 다른 집단간 비교, 종단비교는 다른 시점에 동일 집단간 비교


강의 자료에 엄청 다양한 내용들이 있어서 한번 읽어만 봤다.
뒤로 갈수록 이해되는게 하나도 없었다. 이해하기를 포기한 것 같기도 하고!
나중에 이런 내용들을 알아야 해서 공부할 때, 그때 거기서 봤었던 것 같다 라는 느낌이라도 들면 좋겠다!

profile
ai school 기간 동안의 TIL!

0개의 댓글