part2 에서는 코드보다는 통계 지식들 위주로 알려준다.
어떤 편향들이 있고, 상황에 따라 어떤 검정 방법들을 쓰면 좋을지 알려준다. 2장에서 강조한 것은 부트스트랩!
기초 통계 책을 읽으면서 가볍게 봤던 이론들을 한번 더 꼼꼼히 점검할 수 있어서 좋았다.
2장까지 공부하고나서 느낀건, 문과생 특성상 외우라고 해서 ㅇㅋㅇㅋ하면서 슥슥 대강 이해하면서 외우고 이런건 가능할지언정... 머릿속에 완벽하게 때려넣는건 안 된다는 것...? 공부하고 집오면 또 까먹음.. 이번주는 러프하게 모든 내용을 쭉 훑고, 책을 n번 반복해서 읽고, 또 공부하다 모를때마다 책을 참고하는 식으로 해야겠다...
Part 2. 데이터와 표본분포
*표본(sample), 모집단(population), 임의표본추출(random sampling)로 추출된 표본: 단순임의표본
추첨 후 다시 모집단에 넣기: 복원추출 <-> 비복원추출
*층화표본추출(stratified sampling): 모집단을 층으로 나눈 뒤, 각 층에서 무작위로 표본 추출
(특정 계층의 수가 적으면 가중치를 부여)
*계층(stratum): 공통된 특징을 가진 모집단의 동종 하위그룹
*표본편향(sample bias): 모집단을 잘못 대표하는 표본
*비임의(nonrandom): 아무리 랜덤이라도 어떤 표본도 완벽히 대표하는 것은 불가능하다
*자기선택편향: 리뷰를 남길 때 편향 발생 -> 상황을 정확히 파악하기 위한 지표로는 어렵지만, 다른 시설과 단순 비교할 때 신뢰할 만 하다.
*통계적 편향: 측정 과정에서 발생하는 계통적인 오차 (임의표본추출로 인한 오류와는 다르다)
대량의 데이터 필요할 경우? 데이터가 크고 희소할 때 ex. 검색어
실제 연관된(pertinent) 레코드의 수는 수천개 정도만 해도 효과적임 (이 경우는 임의표본추출은 도움되지 않음)
*선택편향(selection bias): 관측 데이터를 선택하는 방식 때문에 결국 오해의 소지가 있거나 단편적인 결론을 얻게 됨
데이터 스누핑: 흥미로운 것을 찾아 광범위하게 데이터를 살피는 것
방대한 검색 효과: 중복 모델링이나 너무 많은 예측변수를 고려하는 모델링에서 비롯되는 편향
성능 검증하기 위해 둘이상의 홀드아웃세트 이용하거나, 목푯값 섞기(순열 검정)를 하면 된다.
이외에 통계에서 나타나는 선택편향: 비임의표본추출, 데이터 체리 피킹(선별), 특정한 통계적 효과를 강조하는 시간 구간 선택, 흥미로운 결과가 나올 때 실험을 중단하는 것.
*평균으로의 회귀(regression to the mean): 연속적으로 측정했을 때 나타나는 현상. 예외 관찰되면 그 다음엔 중간 정도 경우가 관찰되기에 예외를 너무 특별히 생각하게 되면 선택편향으로 이어질 수 있다.
(선형회귀와 구분. 예측변수와 결과변수 사이의 선형적 관계 추정법)
*표본통계량: 더 큰 모집단에서 추출된 표본 데이터들로부터 얻은 측정 지표
*데이터분포: 어떤 데이터 집합에서의 각 개별값의 도수분포
*표본분포: 어떤 표본들로부터 얻은 표본통계량의 도수분포
*중심극한정리: 표본 크기가 커질수록 정규분포를 따르는 경향
중심극한정리 덕분에, 추론을 위한 표본분포의 신뢰구간이나 가설검정 계산에 t분포 사용
*표준오차: 여러 표본들로부터 얻은 표본 통계량의 변화
*표본의 변동성: 다른 표본 뽑으면 결과가 다를 수 있음
-표본이 클수록 표본 통계량의 분포는 적어진다.
<seabon 추출하기: import seaborn as sns>
표본 1000개 추출: income: loans.sample(1000)
5개의 평균 1000개 추출: income: [loans.sample(5).mean() for _ in range(1000)]
모두 보여줘라 results =pd.concat([_,_,_])
표준오차: 통계에 대한 표본분포의 변동성을 말해주는 단일 측정지표 s/√n
표본크기 클수록, 표준오차 작음. 둘의 관계를 n제곱근의 법칙이라고 함.
=표준오차 2배 줄이려면 표본 크기를 4배 증가시켜야 함.
-> 매번 새 샘플 수집하기 어려우므로, 부트스트랩 사용
<bootstrap>
현재 있는 표본에서 추가적으로 복원추출하고, 각 표본의 통계량과 모델을 다시 계산하는 것.
재표본추출(resampling): 관측 데이터로부터 반복해서 표본추출하는 과정. 부트스트랩과 순열과정 포함
<절차>
1. 샘플 하나 뽑아서 기록하고 다시 제자리에 놓는다
2. 이를 n번 반복
3. 재표본추출된 값의 평균 기록
4. 1~3을 R번 반복 (반복횟수 많을수록 추정 정확)
5. R개 결과로 표준편차 계산, 히스토그램 그리기, 신뢰구간 찾기
->표본통계량 or 추정한 모델 파라미터의 부트스트랩 집합을 얻게 되고, 이 집합이 얼마나 변하는지 조사 가능
results =[]
for nrepeat in range(1000):
sample = resample(loan_income) #재표본추출
results.append(sample.median()) #통계값 넣기
results = pd.series(results)
print(f'original:{loans_income.median()}')
print(f'bias:{results.mean()-loans_income.median()}')
print(f'std.error:{results.std()}')
*다변량 데이터에 적용: 각 행은 여러 변수들의 값을 포함하는 하나의 샘플을 의미.
모델 파라미터의 안정성(변동성) 추정, 예측력 높이기 위해 부트스트랩 사용.
*배깅: 분류 및 회귀트리(의사결정트리) 사용할 때, 여러 부트스트랩 샘플로 트리를 여러개 만들고, 각 트리에서의 예측값을 평균냄
크기 n에 따라 표본분포가 어떻게 달라지는지 알아보기 위한 실험을 통해, 표본 크기를 결정하는 데에 부트스트랩 사용 가능
<신뢰구간>
*신뢰수준(confidense level): 같은 모집단으로부터 같은 방식으로 얻은, 관심 통계량을 포함할 것으로 예상되는, 신뢰구간의 백분율
* 구간끝 점(interral endpoint): 신뢰수준의 최상위, 최하위 끝점
(부트스트랩 신뢰구간 구하는 법)
1. 크기 n인 표본 복원추출
2. 재표본추출한 표본의 원하는 통계량 기록
3. 1~2를 R번 반복
4. x% 신뢰구간을 구하기 위해, 분포 양측에서 [(100-x)/2]% 만큼 잘라냄
5. 절단한 점들은 x% 부트스트랩 신뢰구간의 양끝점임
신뢰수준 높을수록, 구간 넓다. 표본이 작을수록 구간 넓다.
-> 추정에 대한 잠재적 오류 알려주거나, 더 큰 표본이 필요한지 여부 파악
<정규분포>
정규화하다(standardize): 평균을 빼고, 표준편차로 나누다.
z-score: 개별 데이터 포인트를 정규화한 결과 (정규분포=z분포)
QQ-plot: 표본분포가 특정분포에 얼마나 가까운지 보여주는 그림 (z 정수 오름차순 정렬하여 y축에 표시. x축: 정규분포에서의 해당 분위 수)
->scipy.stats.probplot 사용
긴꼬리분포:
꼬리- 적은 수의 극단값이 주로 존재
왜도- 한쪽 꼬리가 반대쪽보다 긴 정도
흑고니 이론: 이례적인 사건이 정규분포로 예측되는 것보다 훨씬 자주 일어날 수 있다.
QQ plot에서 대각선과 일치하면 정규분포에 가깝다.
T분포:
- 정규분포와 비슷하지만 꼬리 부분이 약간 더 두껍고 길다.
- 표본 통계량의 분포 설명. 표본평균 분포는 일반적으로 t분포와 같은 모양. 표본 클수록 정규분포를 닮은 t분포 형성.
-자유도: 다른 표본크기, 통계량, 그룹의 수에 따라 t분포를 조절하는 변수
- t분포의 정확도: 표본에 대한 통계량의 분포가 정규분포 따른다는 조건 필요로 함
(모집단이 정규분포가 아니어도, 보통 표본통계량은 정규분포 따름) = 중심극한정리
<이항분포>
*시행(trial): 독립된결과를 가져오는 하나의 사건
*성공: 시행에 대한 관심의 결과 =이진결과
*이항식(binomial): 두가지 결과를 갖는다.
*이항시행: 두가지 결과를 가져오는 시행 ex.베르누이 시행
*이항분포: n번 시행에서 성공한 횟수에 대한 분포=베르누이 분포
(확률의 합이 1이 되면 됨. 덜 나오는 결과에 1을 지정하는 게 일반적)
-성공확률 p가 정해져 있을 때, n 중에서 성공한 횟수 x의 도수분포
-이항분포의 평균:np. 분산:n*p(1-p). n이 크고, p가 0,1에 너무 가깝지 않은 경우, 이항분포는 정규분포로 근사할 수 있음.
ex. 한번의 클릭이 판매로 이어질 확률이 0.02일 때, 200회 클릭으로 0회 매출을 관찰할 확률은 얼마인가?
stats.binom.pmf(2,n=5,p=0.1)
<카이제곱분포>
:범주의 수에 대해 기댓값에서 이탈하는 것이 있냐 => 귀무가설
카이제곱이 작을수록 기대분포 따르고, 카이제곱이 클수록 기대한 것과 다르다.
*카이제곱 통계량: 검정결과가 독립성에 대한 귀무 기댓값에서 벗어난 정도를 측정
-관측 데이터가 특정분포에 적합한정도를 나타내며, 여러 처리의 효과가 서로 다른지 여부를 결정하는 데 유용함.
-> 귀무모델에서 반복적으로 재표본추출
<F분포>
-여러 그룹에 걸쳐 서로 다른 처리를 테스트할 때, 연속된 관측값 처리.
그룹 평균간 차이가 정규 무작위 변동에서 예상할 수 있는 것보다 얼마나 큰지
-각 그룹 내 변동성에 대한 그룹 평균간 변동성 비율 = 분산분석(ANOVA)
F통계량의 분포 => 모든 그룹의 평균이 동일한 경우(=귀무모델) 무작위 순열 데이터에 의해 생성되는 모든 값의 빈도 분포
<푸아송분포>
*람다: 단위시간이나 단위 면적당 사건이 발생하는 비율
*푸아송분포: 표집된 단위 시간이나 단위 공간에서 발생한 사건의 도수분포
*지수분포: 한 사건에서 그다음 사건까지의 시간이나 거리에 대한 도수분포
*베이불 분포: 사건 발생률이 시간에 따라 변화하는,지수 분포의 일반화된 버젼
1. 푸아송분포
ex. 5초동안 서버에 도착한 인터넷 트래픽을 95% 확률로 완벽하게 처리하는 데 필요한 용량은 얼마일까?
핵심 파라미터: 람다 (일정 시간/공간에서 발생한 평균 사건 수)
stats.poisson.rvs(2,size=100)
ex. cs가 1분달 평균 2개면, 100분 시뮬레이션 하여 100분당 cs갯수 알려줌
2. 지수분포
: 사건과 사건간의 시간분포 모델링 ex. 고장이 발생하는 시간
stats.expon.rvs(scale=(1/0.2),size=100)
=주기별 평균 사건 수가 0.2인 지수분포에서 난수 100개 생성
분당 평균 0.2개 cs 걸려올 때, 100분 동안의 cs 전화시간 알 수 있음
가정: 람다가 해당 기간동안 일정하게 유지된다는 가정
3. 고장률 추정
-> 드물게 발생하는 사건. 20시간 후에도 아무일 안 일어나면 시간당 발생율이 1이 아니라는 것을 알 수 있음 (그 이하로 떨어지지 않을 임곗값 추산하여 구함)
4. 베이불 분포
:사건 발생률이 시간에 따라 지속적으로 변할 때
B>1 이면 발생율이 시간에 따라 증가, B<1이면 감소
stats.weibull_min.rvs(1.5,scale=5000,size=100)
=1.5의 형상 파라미터, 5000개의 특성 수명, 난수가 100개
*부트스트랩 = 표본추정에서 잠재적 오차를 판별할 때 유용한 모든 문제에 적용 가능한 방법
'마케팅 정보방 > 비밀 공부방' 카테고리의 다른 글
퍼포먼스마케팅 추천도서 핵심내용 정리 (0) | 2023.06.28 |
---|---|
데이터 과학을 위한 통계 Part 1 (0) | 2022.03.16 |
MODE 사이트에서 데이터분석 혼자 공부하기 (0) | 2022.03.12 |
세상에서 가장 쉬운 통계학 입문 - 그로스마케터 권장도서 (5) | 2022.03.08 |
댓글