[Programmers] 34. 인공지능 수학 기초 (7): 통계학 기초 (1): 통계학의 개념/용어, Python 실습

illstandtall·2021년 5월 1일
0

Programmers dev course

목록 보기
34/34
post-thumbnail

오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!


통계학 (Statistics)

  • 데이터의 수집(collection), 구성 (organization), 분석 (analysis), 해석 (interpretation), 표현(presestation)에 관한 학문입니다.

  • 기술 통계학 (Descriptive statistics)

    • 수집된 데이터를 설명하는 분야입니다.
  • 추측 통계학 (Inferential statistics)

    • 수집된 데이터를 통해 미래를 예측을 하는 분야입니다.

통계학의 개념/용어

  • 모집단 (Population)

    • 어떤 질문이나 실험을 위해 관심의 대상이 되는 개체나 사건의 집합을 말합니다.
      • ex) 전교 남학생의 키
  • 모수 (Parameter)

    • 모집단의 수치적인 특성을 말합니다.
      • ex) 키의 평균
  • 표본 (Sample)

    • 모집단에서 선택된 개체나 사건의 집합을 말하며,

    • 보통 모집단의 수가 큰 경우 모집단 내 표본을 선택하여 실험을 진행 한 뒤 모수를 추론합니다.

  • 도수 (Frequency)

    • 어떤 사건이 실험이나 관찰로부터 발생한 횟수를 말합니다.

    • 표현방법

      • 도수 분포표(frequency distiribution table)
      • 막대그래프(bar graph): 질적자료,
      • 히스토그램(histogram): 양적자료,
      • 줄기-잎그림 (stem and leaf diagram): 양적자료
      • ex) 질적데이터 {AAAAAAAAAAAAABBBBBCC}

        도수분포표

        ABC
        1352
  • 상대도수 )Relative frequency)

    • 도수를 전체 원소의 수로 나눈 것입니다.
  • 평균 (Mean)

    x1+x2+...+xnn=1ni=1nxi\frac{x_{1} + x_{2} + ... + x_{n}}{n} = \frac{1}{n}\sum_{i=1}^nx_{i}
    • 모평균(μ\mu): 모집단 전체 자료일 경우 모평균입니다.

    • 표본평균(x\overline{x}): 모집단에서 추출한 표본의 평균이 표본평균입니다.

  • 중앙값 (Median)

    • 평균의 경우 극단 겂의 영향을 많이 받습니다.

    • 주어진 자료를 정렬했을 때 정 가운데에 있는 값을 말합니다.

      • 데이터가 홀수일 경우는 n+12\frac{n+1}{2}번째 자료값입니다.

      • 데이터의 개수가 짝수일 경우는 n2\frac{n}{2}번쨰와 n2+1\frac{n}{2}+1 번째 자료값의 평균을 중앙값으로 합니다.
        (원래 존재하지 않는 데이터일 수 있습니다.)

  • 분산 (Variance)

    • 편차의 제곱의 합을 자료의 수로 나눈 값을 말합니다. (편차: 값과 평균의 차이)

    • 자료가 모집단일 경우

      σ2=1Ni=1N(xiμ)2\sigma^2 = \frac{1}{N}\sum_{i=1}^N(x_{i}-\mu)^2

    • 자료가 표본일 경우: (n-1) 아주 중요

      s2=1n1i=1n(xix)2s^2 = \frac{1}{n-1}\sum_{i=1}^n(x_{i} - \overline{x})^2

    • => 값들이 평균을 기준으로 많이 떨어져 있으면 분산이 큽니다.
      극단적으로 분산이 0이면 평균과 똑같다고 할 수 있습니다.

  • 표준편차 (Standard Deviation)

    • 분산의 양의 제곱근입니다.
      • σ=σ2, s=s2\sigma = \sqrt{\sigma^2}, \ s = \sqrt{s^2}
    • 모 표준편차 (Population standard deviation)

      σ=1Ni=1N(xiμ)2\sigma = \sqrt{\frac{1}{N}\sum_{i=1}^N(x_{i}-\mu)^2}

    • 표본 표준편차 (Sample standard deviation) 표본표준분산에 루트 씌운거

      s=1n1i=1n(xix)2s = \sqrt{\frac{1}{n-1}\sum_{i=1}^n(x_{i} - \overline{x})^2}

  • 범위 (Range)

    • 데이터들의 가장 큰 값과 가장 작은 값의 차이를 말하며, 데이터의 범위는 이 범위 내에 들어 있습니다.

    • 인공지능 feature scailing 할 때 유용하게 사용

  • 사분위 수 (Quartile)

    • 전체 자료를 정렬했을 때 14,12,34\frac{1}{4}, \frac{1}{2}, \frac{3}{4} 위치에 있는 숫자를 말합니다.

    • Q1Q1: 제 1 사분위 수, Q2Q2: 제 2 사분위 수, Q3Q3: 제 3 사분위 수, Q4Q4: 제 4 사분위 수

  • 사분위범위 (IQR, Interquartile range)

    • Q3Q1Q3 - Q1: 윗 구간과 아랫 구간을 제외하고 중간 정도의 데이터들의 범위를 나타냅니다.

    • 범위(range)는 가장 큰 값과 가장 작은 값에 의존하기 때문에,
      데이터들이 한 쪽에 몰려 있는 경우 비효율 적인 범위를 나타내게 됩니다.
      그래서 구간을 나누어 범위를 표현하는 방법입니다.

  • zscorez -score

    • 어떤 값이 평균으로부터 몇 표준편차 떨어져 있는지를 의미하는 값을 말합니다.

    • 모집단의 경우

      • z=xμσz = \frac{x-\mu}{\sigma}
    • 표본의 경우

      • z=xxsz = \frac{x-\overline{x}}{s}

통계학 기초 python 실습

import statistics
a = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
b = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 1000]

print('a:', a)
print('len(a):', len(a))
print('b:', b)
print('len(b):', len(b))
a: [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
len(a): 14
b: [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 1000]
len(b): 15

평균 (mean)

mean_a = statistics.mean(a)

print('mean_a:', mean_a)
mean_a: 70.07142857142857

중앙값 (median)

  • b의 평균
print('b:', sorted(b))
mean_b = statistics.mean(b)

print('mean_b:', mean_b)
b: [47, 51, 54, 54, 55, 62, 74, 78, 79, 84, 85, 85, 85, 88, 1000]
mean_b: 132.06666666666666
  • b의 중앙값
    • b의 평균과 비교
      • 가장 큰 값에 좌우되던 b의 평균이지만, b의 중앙값으로 a의 평균과 얼추 맞아졌습니다.
median_b = statistics.median(b)

print('median_b:', median_b)
print('mean_a:', mean_a)
median_b: 78
mean_a: 70.07142857142857

분산 (variance)

  • 표본분산
var_a = statistics.variance(a)

print('var_a:', var_a)
var_a: 234.37912087912088
var_b = statistics.variance(b)

print('var_b:', var_b)
57868.78095238096
  • 표본분산 - scipy 패키지 이용
from scipy import stats
var_aa = stats.tvar(a)

print('var_aa:', var_aa)
var_aa: 234.37912087912088

표준편차 (standard deviation)

  • 표본 표준편차
statistics.stdev(a)
15.30944547915178
statistics.stdev(b)
240.55930859640614
  • 모분산, 모표준편차
statistics.pvariance(a)
217.6377551020408
statistics.pvariance(b)
54010.86222222223
statistics.pstdev(a)
14.752550799846134
statistics.pstdev(b)
232.40237137822461

모분산, 모표준편차, 표본분산, 표본표준편차 - numpy이용

import numpy as np
  • 모분산
np.var(a)
217.6377551020408
  • 모표준편차
np.std(a)
14.752550799846134
  • 표본분산 (ddof: Delta edgrees of Freedom)
np.var(a, ddof=1)
234.37912087912088
  • 표본표준편차
np.std(a, ddof=1)
15.30944547915178
  • 범위
max(a) - min(a)
41
max(b) - min(b)
953
  • b는 가장 큰/작은 값에 의존되기 때문에,
    값의 범위가 100이하에 몰려있음에도 범위가 큽니다.
np.max(a) - np.min(a)
41

사분위 수 (Quartile)

  • Q1Q1
np.quantile(a, 0.25)
54.25
  • Q2Q2
np.quantile(a, 0.5)
76.0
  • Q3Q3
np.quantile(a, 0.75)
84.75
  • 6060%에 해당하는 수
np.quantile(a, 0.60) # 
78.8

사분위 범위 (IQR, interquartile range)

  • Q3Q1Q3 - Q1
np.quantile(a, 0.75) - np.quantile(a, 0.25)
30.5
np.quantile(b, 0.75) - np.quantile(b, 0.25)
30.5

z-score

  • 모집단에 대한 z-score
print('a:', a)
print('mean:', statistics.mean(a))
print('모표준편차(population standard deviation):', statistics.pstdev(a))
a: [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
mean: 70.07142857142857
모표준편차(population standard deviation): 14.752550799846134
scipy.stats.zscore(a)
array([ 0.60522221, -1.08939998,  0.26629777, -0.54712088,  1.01193154,
       -1.02161509,  1.2152862 ,  1.01193154, -1.29275464,  1.01193154,
       -1.08939998,  0.94414665,  0.53743732, -1.5638942 ])
  • 표본에 대한 z-score
print('a:', a)
print('mean:', statistics.mean(a))
print('표본표준편차((sample)standard deviation):', statistics.stdev(a))
a: [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
mean: 70.07142857142857
표본표준편차((sample)standard deviation): 15.30944547915178
scipy.stats.zscore(a, ddof=1)
array([ 0.58320672, -1.04977209,  0.25661096, -0.52721887,  0.97512163,
       -0.98445294,  1.17107909,  0.97512163, -1.24572955,  0.97512163,
       -1.04977209,  0.90980248,  0.51788756, -1.50700616])

  • scipy.stats.zscore
    • 에러날 경우: pip install --upgrade --force-reinstall scipy

이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.

profile
주니어

0개의 댓글