즐겁게!! 자신있게!! 살아보세!!

재밌는 인생을 위하여! 영촤!

Language_Study/Python

[Python] 12.통계학

Godwony 2021. 1. 19. 21:28
728x90
반응형

통계학

  • 논리적 사고와 객관적인 사실에 따르며 일반적이고 확률적 결정론에 따라 인과관계를 규명
  • 수집된 자료의 특성을 쉽게 파악하기 위해서 대표값이나 표 또는 그래프로 요약하는 기술통계학과 모집단에서 추출한 정보를 이용해서 다양한 특성을 과학적으로 추론하는 추론 통계학(검정, 분산분석, 회귀분석 등) 으로 나눔

기술통계

  • 자료를 요약하는 기초적인 통계량
  • 모집단의 특성을 유추
  • 빈도분석 : 개수 파악
  • 기술통계분석 : 평균이나 합계 등을 구하는 것

1. 기술통계 함수

  • numpy 에서 numpy 가 기술 통계함수를 소유 : numpy.mean(데이터)
  • pandas에서는 Series 나 DataFrame이 기술 통계함수를 소유 : 데이터.mean()
    • 문법적인 차이도 있으니 참고 DataFrame.mean(데이터프레임)
  • count, min, max, sum, std, var, median, mean(평균)
  • argmin, argmax, idxmin, idxmax(최대값을 가진 데이터의 위치)
  • quantile(사분위수) - IQR(75%-25%)
  • describe : 최대, 최소, 평균, 중간값, 4분위수를 리턴
  • diff(이전 항과의 차), pct_change(이전 항과의 비율)

2. 평균(mean)

1) 산술평균 : 데이터의 총합을 데이터의 개수로 나눈 값

2) 기하 평균 : 평균 비율을 구할 때 사용

  • 매출액이 100인 회사에서 다음해에 매출액이 100이 되었고 그 다음해에 107.8을 기록했다면 평균 성장률은?
  • 첫해에 10% 증가했고 다음해에 2%로 감소햇으므로 평균 성장률은 (10-2)/2 = 4% ?
  • 1.1*0.98의 제곱근

3) 조화평균

  • 2개의 값의 곱에 2를 곱한 후 2개의 수를 더한 값으로 나누는 것
  • 동일한 거리를 시속 100km로 가고 한번은 60km로 갓을 때 평균속도는?
  • 300km를 갔다고 했을 때 평균속도는 ?
  • (2*100*60)/(100+60)

4) 단순 이동 평균

  • 모든 데이터의 평균을 구하는 것이 아니고 최근의 데이터 몇 개의 평균만 구하는것
  • pandas의 Series를 가지고 rolling 메소드에 window에 데이터 개수를 설정해서 호출

5) 지수 이동 평균

  • 최근의데이터에 가중치를 부여해서 평균을 구하는 것
  • pandas의 Series를 가지고 ewm 메소드에 span 매개변수를 데이터 개수를 설정해서 호출

6) 주가를 가지고 회귀를 할 때는 단순 이동평균이나 지수 이동평균을 사용해야 한다.

  • (최근데이터 + (1-알파)이전데이터 + (1-알파)제곱*이전의 이전데이터)/(1+(1-알파)) + (1-알파)제곱)
  • 위와 같은 평균을 가중 평균이라고도 한다.
  • 절사 평균 : 양 극단치의 데이털르 제거하고 평균을 구하는것
Jupyter Server: local
Python 3.7.4 64-bit ('anaconda3': conda): Idle
[1]
import pandas as pd

# 평균 구하기 
s = pd.Series([10, 11, 10.78])
#비율 평균을 산술 평균으로 구하기
print(s.pct_change().mean())
0.040000000000000036

[2]
import math
# 평균 비율을 구할 때는 기하 평균을 사용

print(math.sqrt((11/10)*(10.78/11))-1)
0.03826778819339283

[3]
# 속도의 경우는 조화 평균을 사용
# 동일한 거리를 100km 와 60km로 달린경우
print(2*100*60/(100+60))
75.0
[-]


#단순 이동 평균
print(s.rolling(window=2))

# 지수 이동 평균
print(s.ewm())

3. 중간 값(median)

  • 데이터를 정렬했을 때 가장 중앙에 있는 값
  • 데이터가 짝수인 경우는 중앙의 좌우값 평균을 이용

1 2 3 4 5 : 중간값 -> 3
1 2 3 4 5 6 : 중간값 -> 3.5

  • 중간값 데이터는 데이터 그룹에 없을 수도 있음
  • 중간값과 평균 그리고 최빈값은 모집단을 대표하는 용도로 많이 사용
    • 평균은 극단치에 매우 민감하다.
    • 극단치가 있을 때는 중간값이나 최빈값을 모집단을 대표하는 값으로 사용하는 것이 좋다
    • 시애틀에서 메디나와 윈더미어 주변의 소득을 비교하는 경우 메디나에 빌게이츠가 산다.
    • 평균을 가지고 비교하면 메디나가 높게 나올 가능성이 높다.
    • 이런 경우에는 중간값이나 최빈값을 모집단을 대표하는 값으로 사용하는 것이 좋다.

척도

  • 변수, 변량, 컬럼, 열 이라고도 부르는 테이블에서의 열

1.descriptive.csv

  • 부모의 학력 수준에 따른 자녀의 대학진학 합격 여부를 조사한 데이터 셋
  • 300개의 행과 8개의 열로 구성
  • 열의 의미
    • resident: 거주지역(1,2,3 – 특별시, 광역시, 시군)
    • gender: 성별(1,2 – 남, 여)
    • age: 나이
    • level: 학력 수준(1,2,3 – 고졸, 대졸, 대학원졸 이상)
    • cost: 생활비
    • type: 학교 유형(1,2)
    • survey: 만족도(1-5)
    • pass: 합격여부(1,2)

2. 명목 척도

  • 구분만을 위해서 의미없는 숫자로 만든 데이터 : 범주형이라고도 하기도 합니다.
  • 거주지역이나 성별처럼 특별한 의미없이 구분만을 위해서 만든 척도
  • 기술통계량을 구하는 거시 아무런 의미가 없음
  • 이런 데이터는 비율만 확인하는 것이 일반적
  • 막대 그래프나 원 그래프를 그려서 크기를 확인
  • 이 척도가 분류의 타겟으로 사용이 된다면 비율이 거의 같은 것이 올바른 결과를 유추할 가능성이 높아진다.
    • 차이가 많이 나면 데이터를 더 수집하거나 다운샘플링이나 업샘플링 등을 해 줘야 한다.

3. 서열 척도

  • 구분 뿐 아니라 순위를 표현하는 숫자로 만든 데이터 : 범주형
  • 학력수준이나 학교에서의 성적 순위 같은 데이터
  • 명목 척도 처럼 기술 통계는 별 의미가 없고 비율만 확인하는 것이 일반적
  • 순서는 명확하지만 순서마다 차이가 일정하지 않고 알기 어려움

4. 등간 척도

  • 범주형으로 구분, 순위 그리고 각 값의 간격이 일정한 데이터
  • 학교에서의 점수 및 설문 조사에서의 만족도
  • 이 경우 부터는 기술 통계량이 의미를 갖음
  • 머신러닝, 딥러닝의 데이터로 사용가능

5. 비율 척도

  • 연속형 데이터로 만들어진 데이터
  • 사용자의 입력으로 만들어지는 데이터
  • 기술 통계값이 의미를 갖음
  • 빈도 분석할 때 주의해야 합니다.
    • 빈도 분석을 하게되면 너무 많은 항목이 만들어질 수 있다.
    • bining(구간 분할)을 해서 빈도 분석을 하는 것이 일반적입니다.

표본 추출

  • 전수조사와 표본조사
  • 전수조사는 모집단 내의 모든 대상을 상대로 조사하는 것
    • 모집단의 특성을 정확하게 반영
    • 비용과 기간이 많이 소모
  • 표본조사는 모집단에서 일정한 대상을 샘플링해서 조사하는 것
    • 전수조사의 단점을 보완할 수 있지만 잘못된 샘플링을 하게되면 모집단의 특성을 정확하게 반영할 수 없습니다.
  • 모수는 모집단의 특성을 나타내는 수치를 의미하고 통계량은 표본의 특성을 나타내는 것
  • sample(표본) : 큰데이터 집합으로부터의 부분집합
  • population(모집단) : 데이터 전체 대상
  • N(n) : 모집단의 개수
  • 랜덤 표본 추출 : 무작위 표본
  • 층화 표본 추출 : 모집단을 층으로 나눈 뒤 각 층에서 무작위로 표본을 추출 하는 것
  • 단순 랜덤 추출 : 층화없이 표본을 추출하는 것
  • 복원 추출 : 이전에 추출된 데이터를 다시 모집단에 넣고 추출하는 것 (주사위)
  • 비복원 추출 : 이전에 추출된 데이터를 모집단에서 제거하고 추출하는 것 (로또)
  • 표본 편향 : 잘못된 표본
  • 추정
    • 점 추정 : 하나의 값과 일치하는지 추정
    • 구간 추정 : 범위를 가지고 추정
    • 신뢰수준 : 계산된 구간이 모수를 포함할 확률을 의미하며 보통 90%, 95%, 99% 를 사용
    • 유의수준 : 계산된 구간이 우연히 모수의 특성을 포함할 확률 0.1, 0.05, 0.01 을 사용 p-value
      • 특정 유의 수준을 설정하고 그 유의수준보다 낮게 나오면 기각한다거나 채택을 한다.
    • 신뢰구간 : 모수를 포함할 상한값과 하한값
    • 표본오차(잔차) : 모집단에서 추출한 표본이 모집단의 특성과 정확히 일치하지 않아서 발생하는 확률의 차이

대통령 후보의 지지율 여론조사에서 후보의 지지율이 95% 신뢰수준에서 표본오차 +-3% 범위내에서 32.4%로 조사되었다는 의미는
지지율이 29.4% ~ 35.4%가 나올 확률이 95% 라는 의미 이다
5%는 틀릴 수도 있다.

1. 단순 임의 추출

1) 파이썬에서의 random 모듈이 제공

  • random.random() 을 이용하면 복원추출
  • random.sample() 을 이용하면 비복원 추출
  • random.suffle()(시퀀스 자료형)을 이용하면 시퀀스 자료형을 랜덤하게 섞음
  • random() 함수는 0과 1사이의 실수를 리턴
  • randange(시작숫자, 종료숫자) 를 이용하면 범위를 변경
  • randint(시작숫자, 종료숫자)

2. 가중치를 설정한 추출

  • numpy의 choice 메소드를 이용하면 가중치를 설정해서 추출이 가능
  • choice(배열, size=추출할수, replace=복원추출여부, p=[확률])
  • 데이터의 비율이 동일하지 않을 때는 확률을 설정해서 추출해야 합니다.

3. pandans의 랜덤한 행 추출

  • Series 나 DataFrame의 sample 메소드
    • n : 추출할 데이터 개수
    • frac : 전체 개수에서 추출할 비율 - n과 frac은 같이 설정 불가
    • replace : 복원 추출 여부로 기본값은 False
    • weights : 가중치
    • random_state : 시드 번호 - 계속 나오는 매개변수 중의 하나
      • 머신러닝 할 때 이 옵션의 값을 변경하면서 수행
    • axis : 추출할 방향으로 기본은 행 단위로 추출

4. scikit-learn 라이브러의 model_selection 클래스의 train_test_split() 이용

  • 샘플링 할 때 가장 많이 사용하는 함수
  • 무작위 샘플링을 할 때는 shuffle
  • 층화 추출을 할 때는 stratify 설정
  • test_size 옵션을 이용해서 비율을 설정

Overfit (오버핏)
훈련데이터에는 잘 맞는데 시험데이터에 잘 안맞는 경우
훈련데이터 너무 많거나 변수가 너무 많을 때

변수가 너무 많을 때는 차원숙소 해야됨.
연관성이 없는건 지우고
두개를 하나로 합쳐서(고유벡터, 교차항) 보고 나누거나

728x90
반응형

'Language_Study > Python' 카테고리의 다른 글

[Python] 11-2.Dataframe응용과 시각화  (0) 2021.01.19
[Python] 11-1.DataFrame응용과 시각화  (0) 2021.01.19
[Python] 10-2.데이터전처리  (0) 2021.01.19
[Python] 10-1.데이터전처리  (4) 2021.01.19
[Python] 9.시각화  (0) 2021.01.19