통계 분야의 목표는 우리 주변의 세계를 설명하고 모델화하는 것이다. 그렇게 하려면 모집단을 살펴봐야 한다.
실험이나 모델의 전체 주제로서 모집단
population 을 정의할 수 있다.
예를 들어 1000명의 직원에게 모두 물어보고 100명이 약물을 사용 중이라면 약물 사용률은 10%다. 여기에서 모수는 10%다.
통계는 모집단의 표본이 가진 특성을 설명하는 수치적 측정치로 정의할 수 있다.
통계는 단지 모수의 추정치다. 모집단의 하위 집합을 설명해 전체 모집단을 설명하려고 시도하는 숫자다.
분석을 위해 데이터를 수집하는 두 가지 주요 방법이 있는데, 관측
및 실험
이다.
구체적인 특성을 측정하지만 연구 대상을 변경하지 않을 경우 관측
Observational 방법을 통해 데이터를 얻을 수 있다.
실험
Experimental은 대상에 대한 효과를 관측하고 처리하는 것으로 구성된다. 실험의 대상을 실험 단위라고 한다.
통계는 모집단의 표본을 측정한 결과라는 것을 기억하자. 측정하는 표본을 무엇으로 할지 결정하는 매우 일반적인 방법 두 가지에 대해 이야기하려고 한다. 이 절에서는 표본 크기와 표본 구성원을 결정하는 가장 일반적인 방법인 무작위 표본 추출이라는 주요 표본 추출 유형에 대해 설명한다.
확률 표본 추출은 모집단에서 표본을 추출하는 방법으로, 모든 사람이 선택될 가능성이 있지만, 그 확률의 수는 사용자마다 다를 수 있다. 가장 간단한 확률 표본 추출법은 무작위 표본 추출이다.
교란 요인
confounding factor 은 직접 측정하는 것이 아니라 측정되는 변수를 연결하는 변수다.
중심의 측정은 데이터셋의 가운데 또는 중심을 정의하는 방법이다.
중심 측정값은 데이터셋의 '가운데' 값이다.
중심의 측정은 데이터의 가운데를 정량화하는 데 사용되지만, 이제는 수집한 데이터가 어떻게 '퍼져 있는가'를 측정하는 방법을 모색할 것이다.
표준 편자를 계산 하는 일반적인 수식은 다음과 같다.
$$
s = \frac{\sum(x-\bar{x})^2}{n}
$$
여기서는 다음과 같다.
파이썬 접근 방식을 취하면 프로그래밍 방식으로 이 모든 작업을 수행할 수 있다.
np.std(friends) # == 425.2
상대적 위치의 척도를 만들기 위해 중심과 편차의 척도를 결합할 수 있다.
전체 데이터셋과 관련해서 특정 데이터 값이 위치하는 것을 측정하는 것이 편차 측정값
measure of variation이다.
통계에서 매우 중요한 값인 z-score를 알아보자.
z-score 는 단일 데이터 값이 평균으로부터 얼마나 멀리 떨어져 있는지 알려주는 방법이다.
x 데이터 값의 z-score 는 다음과 같다.
$$
z = \frac{x-\bar{x}}{s}
$$
z_scores = [] m = np.mean(friends) s = np.std(friends) for friend in friends: z = (friend - m)/s z_scores.append(z)
데이터의 성격을 감안할 때 가설에는 다음과 같은 세 가지 옵션만 있다.
- 온라인 친구들의 수와 행복 사이에 긍정적인 연관성이 있다. (하나가 올라갈 때 다른 하나도 올라간다)
- 그들 사이에 부정적인 연관성이 있다. (친구의 수가 늘어나면 행복이 줄어든다.)
- 변수 간에 연관성이 없다 (하나가 변경될 때 다른 하나는 실제로 그렇게 많이 변경되지 않는다.)
상관 계수
correlation coefficients 는 두 변수 간 연관성/관계의 강도를 설명하는 양적 측정이다.
friends = [109, 1017, 1127, 418, 625, 957, 89, 950, 946, 797, 981, 125, 455, 731, 1640, 485, 1309, 472, 1132, 1773, 906, 531, 742, 621] happiness = [.8, .6, .3, .6, .6, .4, .8, .5, .4, .3, .3, .6, .2, .8, 1, .6, .2, .7, .5, .3, .1, 0, .3, 1] import pandas as pd df = pd.DataFrame({'friends':friends, 'happiness':happiness}) df.head()
<div> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>friends</th> <th>happiness</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>109</td> <td>0.8</td> </tr> <tr> <th>1</th> <td>1017</td> <td>0.6</td> </tr> <tr> <th>2</th> <td>1127</td> <td>0.3</td> </tr> <tr> <th>3</th> <td>418</td> <td>0.6</td> </tr> <tr> <th>4</th> <td>625</td> <td>0.6</td> </tr> </tbody> </table> </div>
# 변수들 사이의 상관관계 df.corr()
<div> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>friends</th> <th>happiness</th> </tr> </thead> <tbody> <tr> <th>friends</th> <td>1.000000</td> <td>-0.216199</td> </tr> <tr> <th>happiness</th> <td>-0.216199</td> <td>1.000000</td> </tr> </tbody> </table> </div>
from sklearn import preprocessing df_scaled = pd.DataFrame(preprocessing.scale(df), columns=['friends_scaled', 'happiness_scaled']) df_scaled.head()
<div> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>friends_scaled</th> <th>happiness_scaled</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>-1.599495</td> <td>1.153223</td> </tr> <tr> <th>1</th> <td>0.536040</td> <td>0.394939</td> </tr> <tr> <th>2</th> <td>0.794750</td> <td>-0.742486</td> </tr> <tr> <th>3</th> <td>-0.872755</td> <td>0.394939</td> </tr> <tr> <th>4</th> <td>-0.385909</td> <td>0.394939</td> </tr> </tbody> </table> </div>
# 평균의 표준 편차 1 이내의 사람들의 비율 찾기 within_1_std = df_scaled[(df_scaled['friends_scaled'] <= 1) & (df_scaled['friends_scaled'] >= -1)].shape[0] within_1_std / float(df_scaled.shape[0])
0.75
# 평균의 표준 편차 2 이내의 사람들의 비율 찾기 within_2_std = df_scaled[(df_scaled['friends_scaled'] <= 2) & (df_scaled['friends_scaled'] >= -2)].shape[0] within_2_std / float(df_scaled.shape[0])
0.9166666666666666
# 평균의 표준 편차 3 이내의 사람들의 비율 찾기 within_3_std = df_scaled[(df_scaled['friends_scaled'] <= 3) & (df_scaled['friends_scaled'] >= -3)].shape[0] within_3_std / float(df_scaled.shape[0])
1.0