FastCampus UpStage AI/통계

기초 통계량 - 데이터 분포 이해 (대푯값)

하오츠(해석:맛있다) 2024. 10. 8. 16:36

목표 

통계를 배워보자 

 

우리는 왜 통계를 배워야 하는가?

- 데이터의 분포, 중앙값, 분산등을 이해하는데, 도움을 주며 이는 ai 모델 성능에 영향을 줄 수 있다.

- 데이터를 분석해서 패턴을 찾고 예측한다

 

1. 대푯값을 찾아라  - 평균값, 중앙값, 최빈값

실무에서 어떤 값을 기준으로 고려할지 생각해보자 

 

1) 평균값 - 산술평균, 기하평균, 조화평균

 

산술평균 - 정말 평균 값을 알고 싶을때, 예를 들어 n명의 연봉 평균

=> (a의 연봉 + b의 연봉 + c의 연봉) / (3)

 

import pandas as pd

df = pd.read_excel('{}.xlsx')

df.mean()

 

기하평균 - 연 평균 증가율을 알고 싶을때, 예를 들어 매출 증가액

=> 회사의 매출액 2019년 15억, 2020년 30억, 2021년 25억 연 평균 매출 증가율

 

1차 관측된 값

2019 -> 2020  ((30억 - 15억) / 2 ) / 15억 => 1 (100%)  

2020 -> 2021 ((25억 - 30억) / 2) / 30억 => -1/6 (-16.66%)

 

2차 기하평균을 내는 값

((1+1)X(1+(-0.1666)))½  = 1.29 

평균적 129% 매출 매년 성장

 

2019->2020 (15억 x 100% + 15억 x 29%) => 4.35억 증가, 19.35억

2020->2021 (19.35억 x 100% + 19.35억 * 29%) => 5.61억 증가, 24.96억

 

 

import pandas as pd 

dict = {'ym' : ['2019','2020','2021'], 'sales' : [15,30,25]}
origin = pd.DataFrame(dict)


temp = origin.copy()
temp['comp'] = temp['sales'].shift(-1)
temp.dropna(axis = 0, inplace = True)

# 1차 관측된 값
temp['rate1'] = round((temp['comp'] - temp['sales']) / temp['sales'], 3) 

# 2차 기하평균
temp['rate2'] = 1 + temp['rate1']

from functools import reduce
arr = temp['rate2']
mean = pow(reduce(lambda x, y: x * y, arr), 1/(len(origin) - 1))

print(f"매출 증가액 : {mean}")

ori_value = 15
for i in range(1,6) : 
    ori_value = round(ori_value * mean, 2)
    print(f"{2019 + i} 예상 매출액 : { ori_value}억")

origin

 

 

 

조화평균 - 동일한 경로로 다르게 해서 달릴때, 평균을 구하고자 한다.

=> 배달 갈때, 3m/s 올때, 1m/s 평균 속력은?

 

평균 속력 = 거리 / 시간

평균 속력 = (왕복거리) / (총 시간)

평균 속력  = (2d) / (d/3 + d/1)

평균 속력 = 2d / ((3+1)d / (3x1))

평균 속력 = (2d X (3X1)) / (3 + 1)d

 

평균 속력 = 2(3x1) / (3+1)  

평균 속력 = 1.5m/s

 

2) 중앙값 

홀수 - 정렬후 인덱스 중앙 값

짝수 - 정렬후 인덱스 중앙 2개의 평균값

 

import pandas as pd

df = pd.read_excel('{}.xlsx')

df.median()

 

3) 최빈값

가장 빈도가 높은 값

 

import pandas as pd

df = pd.read_excel('{}.xlsx')

df.mode()

 

or

 

df.groupby('ym')['사고건수'].agg(pd.Series.mode)