Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

yooonicode

python 데이터 분석 ch 7-1, 7-2 본문

데이터분석

python 데이터 분석 ch 7-1, 7-2

yooonii 2023. 9. 30. 11:27

👻 7-1 통계적으로 추론하기

 

💫 통계적으로 추론하기

- 가설검정, 순열검정, 모수검정, 표준점수, 중심극한정리, 신뢰구간

 

✔️ 모수검정: 모집단에 대한 파라미터의 추정 방법

파라미터 - 평균, 분산 / 모집단 - 관심의 대상인 전체 데이터

➡️ 현실적으로 모두 조사하기 어려워, 일부 데이터를 조사하는 것이 모수검정, 일부 샘플은 표본이라 부름

- 모수검정시, 모집단의 데이터에 대한 가정을 전제로 하고 수행되는 경우가 많음, 모집단의 데이터가 정규 분포를 따른다고 가정하는 방식

 

✔️ 표준점수(z 점수): 각 값이 얼마나 떨어져 있는지를 표준편차를 사용해 변환한 점수

sigma - 모집단의 표준편차
x bar, s는 표본에서 사용하는 기호

✔️ Z 점수 구하기

⬆️ 사이파이로 편리하게 계산하는 방법도 있음

- stats 모듈 임포트 후 zscore() 사용하여 배열 x에 대한 모든 z 점수 계산 가능

 

✔️ 누적분포

표준정규분포: 평균이 0, 분산이 1인 정규분포, z=x의 결과를 나타내므로 표준정규분포에서는 z 점수를 사용해 전체 데이터의 분포를 알 수 있음

- norm.cdf()는 누적된 분포를 반환해줌

1) 평균 0까지의 비율 0.5

2) z 점수 1 이내의 비율 구하기

3) 표준편차 2 이내의 비율 계산하기

- 전체에서 특정비율에 해당하는 z 점수 구하기 ; norm.ppf()

1) 전체에서 90% 누적분포에 해당하는 z 점수


⭐ 중심극한정리

: 정규분포 특성을 유도할 수 있는 방법

: 무작위로 샘플을 뽑아 만든 표본의 평균은 정규분포에 가깝다

 

- 모집단에서 30개의 샘플을 뽑아 표본 만들기

- 표본의 평균 계산하기 * 1000번

- 1000개의 평균을 히스토그램으로 그리면 정규분포를 따르게 됨

➡️ 도서관의 대출 건수는 작은 대출건수가 많아서 정규분포로 보기 어려움, 이를 중심극한정리로 해결

 

1 - 데이터 불러오기

2 - 대출건수 열로 히스토그램 그려보기

3 - 샘플링

: 무작위로 1000개를 샘플링하여 평균을 리스트로 저장하기

sample(), mean(), for문 이용

random.seed()는 유사난수 생성을 위한 초깃값, 실습과 결과 같도록'

- 이를 바탕으로 히스토그램 그리기

- 종 모양이 됨 -> 정규분포와 유사해짐


- 수치상으로도 유사한가?

✔️ 중심극한정리를 따르기 위해, 샘플링의 크기가 30보다 크면 좋음

: 30보다 크면 표준정규분포에 가까워짐

 

- 20으로 낮추었을 경우 / 40으로 높였을 경우

✔️ 특징 2. 표본평균의 표준편차가 모집단의 표준편차를 표본 크기의 제곱근으로 나눈 것과 유사

유사함.

- 구한 표본평균의 표준편차를 표준오차라고 함


✔️ 신뢰구간 : 표본의 파라미터가 속할 것이라 믿는 모집단의 파라미터 범위

- '파이썬' 키워드 포함하며 주제분류번호가 00으로 시작하는 불리언 배열을 만든 후, 인덱

평균 대출건수는 14.7권

⭐ Z 점수 공식과 중심극한정리의 연결로 모집단의 평균범위 예측

뮤는 모집단 평균, s는 표본평균의 표준편차

정리하면

sigma/sqrt n은 표준 오차, sigma는 모집단의 표준편차

- 모집단의 표준편차가 표본의 표준편차와 유사하다고 가정하여 구한다면

1) 표준오차 계산식

- 표준오차에 곱할 z 점수 결정하기 : 표본평균이 95%의 구간에 포함된다고 확신하려 한다면

양쪽에 2.5% 남는 부분을 입력하면 됨 2), 3)

4) 표준오차와 z 점수 곱하여 속할 범위 구하기

➡️ 모집단의 평균이 13.2에서 16.3 사이에 놓일것이라 95% 확신가능


⭐ 가설검정 : 표본의 정보를 사용해 모집단의 파라미터에 관한 가정의 검정

- 파이썬과 C++ 도서의 평균 대출건수가 같다고 가정할 때, 표본을 각각 추출하여 검증 가능

- 평균 대출건수가 같다는 가설 : 영가설, 귀무가설

- 평균 대출건수가 같지 않다는 가설 : 대립가설

두 모집단 평균에 관한 z 점수 공식

x_1, x_2 ; 표본의 평균

mu_1, mu_2 ; 모집단의 평균(알 수 없음)

n_1, n_2 ; 표본의 크기

sigma_1, sigma_2 ; 모집단의 표준편차(알 수 없음, 표본의 표준편차 대신 사용)

 

- 영가설이라 가정하고 점수를 계산한 후 z 점수가 일정수준 이하이면 영가설이 맞고, 평균에 차이가 없는 데이터가 관측될 가능성이 매우 낮으므로 영가설을 기각한 후 대립가설의 채택

- 기준을 유의수준(significance level)이라 하며, 많이 사용하는 기준은 꼬리 두부분을 더해 5%가 되는 지점(=p-값, 0.05미만이면 영가설 기각)

 


 ✔️ C++ 도서를 추출한 후, 권수 확인

- 평균 대출건수 확인

-> 파이썬은 약 14권, 평균 차이가 발생함

 

✔️ z 점수에 대한 가설 검정 공식으로 확인해보기

- 표준 오차 계산하기

⬆️ 가설검정 공식에 대입, 영가설에 따르면 두 모집단의 평균은 같으므로 값을 계산

 

- 계산된 z 점수를 사용해 누적분포를 확인하기

- 0.994가 누적분포이므로 양쪽끝의 면적은 0.006,

p-값은 (1-0.994)*2=0.01으로 0.05보다 작다. 영가설 기각하며 대립가설이 지지됨


⭐ t-검정으로 가설 검증

- 사이파이 안에 두 표본평균을 비교하는 ttest_ind() 사용하여 t-분포인 두 표본을 비교하는 t-검정을 수행

- t-분포 : 정규분포와 비슷하지만, 중앙은 더 낮고 꼬리가 두꺼움

- 표본 크기 30 이하일 때 t-분포를 사용하는 것이 좋음, 30보다 크면 정규분포와 유사해지므로 표본크기에 상관없이 함수를 이용하여 평균을 비교할 수 있음

p-값이 0.05보다 작으므로, 영가설을 기각하며 평균의 차이는 우연이 아님


💫 하지만, 모집단이 정규분포의 형태를 따른다고 가정하는데 실제가 아니라면? - 순열검정

- 순열검정 ; 모집단의 분포가 정규분포를 따르지 않거나, 모집단의 분포를 알 수 없을 때 사용함

- 모집단의 파라미터 추정 없기 때문에 비모수검정 방법 중에 하나

 

1) 두 표본의 평균 차이 계산

2) 표본 섞고 무작위로 두 그룹으로 나누기(원래 표본 크기와 동일하게)

3) 나눈 그룹에서 다시 평균의 차이를 계산

4-) 이 과정을 여러번 반복하여 원래 표본의 평균 차이가 무작위로 나눈 그룹의 평균차이보다 크거나 작은 경우를 고려해 p-값 계산

 

- 두 배열 받아 평균 구하는 함수 만들기

- 순열검정을 실행하는 함수 구현

- 일반적으로 영가설 기각하는 것이 목적, 작은값 선택 후 2를 곱해 양쪽 꼬리 비율 얻기

> 영가설이 옳다고 가정했을 때 이런 데이터가 관측될 확률

- 0.03과 비슷한 결과를 얻음, 영가설 기각 후 차이가 있다고 결론

✔️ 사이파이 1.8 이상에서 순열검정 함수를 지원함

⬆️ 매개변수 표본 튜플로 전달, 비교할 통계치 계산하는 함수(평균;statistic), 9999번 순열검정을 하며 출력


✔️ 자바스크립트, 파이썬 대출건수 평균 차이있는지 확인

➡️ 영가설 기각 불가, 도서 평균 대출건수 차이는 의미가 없다


👻 7-2 머신러닝으로 예측

- 남산도서관의 대출데이터를 머신러닝으로 예측하기

 

✔️ 머신러닝 : 컴퓨터 프로그램을 활용해 데이터에서 패턴을 학습하는 방법

- 인공지능의 하위 분야, 지도학습과 비지도 학습으로 나뉨

75%, 25%로 나눠

- 2차원 배열의 입력은, 행 방향으로 샘플이 나열되며 열방향으로 샘플의 속성이 나열되는데, 머신러닝에서 이런 속성을 특성이라고 부름

- linear_model 모듈 아래의 LinearRegression 클래스를 임포트해서 훈련시킴

- 객체 lr를 만들고, fit() 메서드를 호출하여 훈련할 수 있음

- 훈련한 모델을 평가하기 위해서 score() 메서드 이용하기

score() 메서드가 반환하는 점수(결정계수)는 0-1 사이의 값을 가지므로 0.1의 결과가 나옴

➡️ 도서권수로 대출건수를 예측하는 것은 어려움

- 평균 : 타깃의 평균

예측이 평균에 가까워지면 분모와 분자가 같아져서 R^2 점수는 0이 됨

타깃에 정확히 맞는 예측을 하면 분자가 0에 가까워져 R^2 점수는 1이 된다

예측이 평균보다 나쁘면 결정계수는 음수가 될 수도 있음

 

 

✔️ 선형 회귀 : 선형 함수를 사용해 모델을 만드는 알고리즘

- 대출건수로 대출건수를 예측하는 모델을 만들면 결정계수가 1이 됨

- coef_는 기울기, intercept_는 절편

- 기울기 1, 절편 0에 가까운 작은 음수

 

✔️ 로지스틱 회귀: 타깃이 실수인 문제를 회귀, 타깃이 정수인 문제는 분류라고 부르는데,

타깃이 실수가 아니라 카테고리인 경우에도 분류라고 함

- binary classification / multiclass classification

- 타깃을 클래스라고 부르며, binary classification의 경우에 0일때 음성클래서, 1일때 양성클래스

- 모델이 찾으려는 대상을 양성클래스로 놓게됨

➡️ 대표적인 알고리즘은 로지스틱 회귀, 선형 회귀처럼 선형 함수를 사용하지만, 예측 하기 전 로지스틱함수를 거쳐 연속적인 실수의 출력값을 1 또는 0으로 변환하는 것

더보기

로지스틱회귀의 시그모이드 함수 대신, 소프트맥스 함수를 적용하거나 OvR(One versus Rest) 방식으로 여러개의 이진분류 모델을 설계하여 다중분류까지 수행 가능, 사이킷런의 LogisticRegression 클래스는 이진분류와 다중분류를 모두 지원함

True, False는 자동으로 1, 0으로 인식하여 불리언 시리즈 객체를 이용하여 모델 훈련에 사용할 수 있음

- 사이킷런에서, LogisticRegression 클래스를 임포트하여 선형 회귀 모델과 마찬가지로 fit() 메서드를 호출, 테스트 세트로 score() 메서드를 호출함

- 사이킷런에서는 score() 메서드 출력하는 점수는 정확도, 입력 데이터 중 정답을 맞힌 비율

- value_counts() 메서드를 호출해서 값의 분포를 알기

- 사이킷런은 가장 많은 클래스로 무조건 예측을 수행하는 더미 모델을 제공하는데, 회귀의 경우 DummyRegressor 모델이 있으며, 무조건 타깃의 평균을 예측함. 분류의 경우 DummyClassifier 모델이 가장 많은 클래스를 예측으로 출력함

➡️ 69%의 정확도가 출력, 기본적으로 모델을 만들 때 기준점으로 삼게 됨

평균제곱오차, 제곱근을 씌운 평균절댓값오차도 있음
평균절대오차