open:기초-통계

기초 통계

  • 데이터를 수집하고 표본 추출하는 방법
  • 중심의 측정, 분산, 상대적 비교
  • z-score를 사용해 데이터 정규화
  • 경험적 법칙

통계 분야의 목표는 우리 주변의 세계를 설명하고 모델화하는 것이다. 그렇게 하려면 모집단을 살펴봐야 한다.

실험이나 모델의 전체 주제로서 모집단population 을 정의할 수 있다.

예를 들어 1000명의 직원에게 모두 물어보고 100명이 약물을 사용 중이라면 약물 사용률은 10%다. 여기에서 모수는 10%다.

통계는 모집단의 표본이 가진 특성을 설명하는 수치적 측정치로 정의할 수 있다.

통계는 단지 모수의 추정치다. 모집단의 하위 집합을 설명해 전체 모집단을 설명하려고 시도하는 숫자다.

분석을 위해 데이터를 수집하는 두 가지 주요 방법이 있는데, 관측실험이다.

관측

구체적인 특성을 측정하지만 연구 대상을 변경하지 않을 경우 관측Observational 방법을 통해 데이터를 얻을 수 있다.

실험

실험Experimental은 대상에 대한 효과를 관측하고 처리하는 것으로 구성된다. 실험의 대상을 실험 단위라고 한다.

통계는 모집단의 표본을 측정한 결과라는 것을 기억하자. 측정하는 표본을 무엇으로 할지 결정하는 매우 일반적인 방법 두 가지에 대해 이야기하려고 한다. 이 절에서는 표본 크기와 표본 구성원을 결정하는 가장 일반적인 방법인 무작위 표본 추출이라는 주요 표본 추출 유형에 대해 설명한다.

확률 표본 추출은 모집단에서 표본을 추출하는 방법으로, 모든 사람이 선택될 가능성이 있지만, 그 확률의 수는 사용자마다 다를 수 있다. 가장 간단한 확률 표본 추출법은 무작위 표본 추출이다.

교란 요인confounding factor 은 직접 측정하는 것이 아니라 측정되는 변수를 연결하는 변수다.

불균등 확률 표본 추출

중심의 측정은 데이터셋의 가운데 또는 중심을 정의하는 방법이다.

중심 측정값은 데이터셋의 '가운데' 값이다.

편차 측정

중심의 측정은 데이터의 가운데를 정량화하는 데 사용되지만, 이제는 수집한 데이터가 어떻게 '퍼져 있는가'를 측정하는 방법을 모색할 것이다.

표준 편자를 계산 하는 일반적인 수식은 다음과 같다.
$$ s = \frac{\sum(x-\bar{x})^2}{n} $$
여기서는 다음과 같다.

  • s 는 표본 표준 편차다.
  • x 는 각각의 개별 데이터 포인트이다.
  • $\bar{x}$ 는 데이터의 평균이다.
  • n 은 데이터 포인트의 수다.

파이썬 접근 방식을 취하면 프로그래밍 방식으로 이 모든 작업을 수행할 수 있다.

snippet.python
np.std(friends) # == 425.2

상대적 위치의 척도를 만들기 위해 중심과 편차의 척도를 결합할 수 있다.

전체 데이터셋과 관련해서 특정 데이터 값이 위치하는 것을 측정하는 것이 편차 측정값measure of variation이다.

통계에서 매우 중요한 값인 z-score를 알아보자.

z-score 는 단일 데이터 값이 평균으로부터 얼마나 멀리 떨어져 있는지 알려주는 방법이다.

x 데이터 값의 z-score 는 다음과 같다.
$$ z = \frac{x-\bar{x}}{s} $$

  • x 는 데이터 포인트다.
  • $\bar{x}$ 는 평균이다.
  • s 는 표준 편차다.
snippet.python
z_scores = []
 
m = np.mean(friends)
s = np.std(friends)
 
for friend in friends:
    z = (friend - m)/s
    z_scores.append(z)

데이터의 성격을 감안할 때 가설에는 다음과 같은 세 가지 옵션만 있다.
- 온라인 친구들의 수와 행복 사이에 긍정적인 연관성이 있다. (하나가 올라갈 때 다른 하나도 올라간다)
- 그들 사이에 부정적인 연관성이 있다. (친구의 수가 늘어나면 행복이 줄어든다.)
- 변수 간에 연관성이 없다 (하나가 변경될 때 다른 하나는 실제로 그렇게 많이 변경되지 않는다.)

상관 계수 correlation coefficients 는 두 변수 간 연관성/관계의 강도를 설명하는 양적 측정이다.

snippet.python
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>
snippet.python
# 변수들 사이의 상관관계
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>
snippet.python
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>
snippet.python
# 평균의 표준 편차 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
snippet.python
# 평균의 표준 편차 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
snippet.python
# 평균의 표준 편차 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

  • open/기초-통계.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1