728x90
- 과거의 인공지능, 머신러닝 기반 시스템은 주로 확률과 관련 있었음
-통계학(Statistics) : 수치 데이터의 수집, 분석, 해석, 표현 등을 다루는 수학의 한 분야
통계학 | ||
기술 통계학 | 추론 통계학 | |
연속형 데이터 | 범주형 데이터 | 단서 > 가설 설립/검정 > 문제 해결 일부 연령층, 일부 지역 주민, 혹은 무작위 선정 통해 표본 선정 > 통계분석 실시 > 모집합(전 국민)에 대한 결과 유추 - 가설 검정 - 수치로 되어있는 특징들 계산 - 각 데이터 간의 상관관계 분석 |
키/나이/가격 데이터 바탕으로 평균/표준편자와 같은 형식으로 요약 | 이름/종족/성별 데이터 바탕으로 빈도/백분율과 같은 자료 형식으로 요약 |
- 통계 모델링 : 데이터에 통계학을 적용하여 변수의 유의성을 분석함으로써 방대한 양의 데이터에 숨겨진 특징을 찾아내는 것을 의미
- 통계 모델(수학적 모델) : 변수들로 이루어진 수학 식이 있을 때, 이러한 수학 식을 계산해 실제 값을 추정하는 방법 (y=ax+b)
- 통계 모델은 여러 개의 가정을 가지고 있는데, 이 가정들은 '확률분포'를 따름 → 가운데가 볼록한 형태의 대칭형 종모양 그래프(정규 분포; normal distribution - 직역하면 평균의 분포)
- 모든 변수, 즉 데이터가 이러한 가정에 만족해야 하는 기본 가정으로 시작하며 이 조건이 만족할 떄만 모델의 성능이 통계학적으로 의미를 갖게 됨
- 확률 분포(probability distribution)
- 최빈값 : 분포 상 가장 많은 빈도수를 가진 값
- 중앙값 : 값들을 순서대로 나열했을 때 순서 상 중앙에 위치하는 값
- 평균 : 값들의 무게중심이 어디인지를 나타내는 값, 일반적으로 산술평균을 칭함, 특이값의 영향을 크게 받음
- 통계랑 수치들을 바탕으로 데이터의 분포 형태를 대략적으로 유추 가능
- 코드로 통계량 수치 확인하기
# 모듈 불러오기
import numpy as np
from scipy import stats
# 무작위 난수를 출력하더라도 같은 무작위 값을 얻도록 설정
# 0은 숫자의 의미보다는 실험을 위한 '통제 가능 제한적 공간'
np.random.seed(0)
# 분포를 이룰 무작위 데이터 생성: 0부터 100까지의 범위 안에서 10000개의 데이터를 무작위 추출
data_A = np.random.randint(0, 100, 10000)
# 각 평균, 중앙값, 최빈값 계산
mean = np.mean(data_A)
median = np.median(data_A)
mode = stats.mode(data_A)
print('평균값 : ', mean.round(2))
print('중앙값 : ', median)
print('최빈값 : {} ( {} )'.format(mode[0][0], mode[1][0])) # 최빈값(개수)
- 정규 분포 데이터 만들기
# 모듈 불러오기
import numpy as np
from scipy import stats
# 무작위 난수를 출력하더라도 같은 무작위 값을 얻도록 설정
# 0은 숫자의 의미보다는 실험을 위한 '통제 가능 제한적 공간'
np.random.seed(0)
# 정규분포 데이터 생성: 정규분포를 따르는 100개의 데이터 추출
data_B = np.random.normal(size = 100)
# 각 평균, 중앙값, 최빈값 계산
mean = np.mean(data_B)
median = np.median(data_B)
mode = stats.mode(data_B)
print('평균값 : ', mean.round(2))
print('중앙값 : ', median)
print('최빈값 : {} ( {} )'.format(mode[0][0], mode[1][0])) # 최빈값(개수)
- 변량의 측정
- 변량 : 변수, 수치
- 산포 : 데이터의 변량, 데이터가 얼마나 중심으로 모이지 않고 흩어져 있는지
- 분산 : 평균과의 거리를 제곱한 값의 평균
- 표준 편차 : 분산의 제곱근
- 분산은 값이 너무 커서 비교가 쉽지 않기 때문에 이를 보완하고자 표준 편차 사용
- 사분위 수 : 데이터 구성을 전체적으로 살펴보고자 할 때 사용
- 데이터의 이상치 탐색과 중심위치 및 분포를 빠르게 파악할 수 있다는 강점
- 데이터들을 크기 순으로 가장 작은 값부터 가장 큰 값까지 정렬한 후,
- 1사분위수 : 1/4 즉 25%에 해당하는 지점
- 2사분위수 : 2/4 즉 50%에 해당하는 지점
- 3사분위수 : 3/4 즉 75%에 해당하는 지점
- 4사분위수 : 4/4 즉 100%에 해당하는 지점
- 단, 전체 범위가 짝수인 경우 각 단면의 값들을 평균을 구해 표현
import pandas as pd
# 치킨집 A사와 B사의 배달시간 데이터('분' 단위)
store_a = pd.Series([20, 21, 23, 22, 26, 28, 35, 35, 41, 42, 43, 45, 44, 45, 46, 47, 47, 46, 47, 58, 58, 59, 60, 56, 57, 57, 80])
store_b = pd.Series([5, 6, 11, 13, 15, 16, 20, 20, 21, 23, 22, 27, 27, 30, 30, 32, 36, 37, 37, 40, 40, 43, 44, 45, 51, 54, 70, 600])
# quantile()를 활용해 사분위수 값 출력
A_Q1 = store_a.quantile(0.25)
A_Q2 = store_a.quantile(0.50)
A_Q3 = store_a.quantile(0.75)
A_Q4 = store_a.quantile(1)
print('1사분위수 : ', A_Q1)
print('2사분위수(중앙값) : ', A_Q2)
print('3사분위수 : ', A_Q3)
print('4사분위수 : ', A_Q4, '\n')
B_Q1 = store_b.quantile(0.25)
B_Q2 = store_b.quantile(0.50)
B_Q3 = store_b.quantile(0.75)
B_Q4 = store_b.quantile(1)
print('1사분위수 : ', B_Q1)
print('2사분위수(중앙값) : ', B_Q2)
print('3사분위수 : ', B_Q3)
print('4사분위수 : ', B_Q4, '\n')
- boxplot
# 데이터 시각화 패키지
import matplotlib.pyplot as plt
# boxplot 활용
plt.boxplot((store_a, store_b))
plt.grid()
plt.show()
- IQR(InterQuartile Range) : 사분범위의 1.5배 (이를 기준으로 이상치 판단)
- 양 쪽 25%를 자르고 가운데 50%만 보는 것
- IQR = Q3 - Q1
- 하단 이상치 기준선 = Q1 - IQR*1.5
- 상단 이상치 기준선 = Q3 + IQR*1.5
- boxplot은 이상치 탐색, 데이터의 분포 등을 확인할 때 유용, 다수의 객체들과 비교하고자 할 때도 유용
728x90
'PROGRAMMING > PYTHON' 카테고리의 다른 글
[Python] input() vs sys.stdin.readline() (0) | 2021.08.16 |
---|---|
[Python] 객체 지향 프로그래밍(OOP) (0) | 2021.07.30 |
[Python] JSON, open API 다루기 (0) | 2021.04.28 |
[Python] Matplotlib (0) | 2021.04.26 |
[Python] Pandas 다루기 - 범죄 현황 데이터 (0) | 2021.04.26 |
댓글