[2유형] 데이터 분석 : 비지도학습 학습 (교재 178p ~ 187p)
[3유형] 통계적 가설 검정 : 통계적 가설 검정 학습 (교재 190p ~ 199p)
[3유형] 통계적 가설 검정 : 통계적 가설 검정 기법 실습 학습 (교재 200p ~ 220p)
과제
- 3주차 학습 내용 업로드
- 모의고사 1회 문제의 제3유형 문제 풀이 (교재 223p)
https://github.com/hscrown/bigdata/blob/main/%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC_1%ED%9A%8C_3%EC%9C%A0%ED%98%95.ipynb- 모의고사 2회 문제의 제3유형 문제 풀이 (교재 237p)
https://github.com/hscrown/bigdata/blob/main/%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC_2%ED%9A%8C_3%EC%9C%A0%ED%98%95.ipynb
# 패키지 임포트
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 데이터 불러오기
df = pd.read_csv("iris.csv")
# 데이터 전처리
## species 컬럼의 데이터는 object > 레이블 인코딩으로 0,1,2 정수형으로 변경
from sklearn.preprocessing import LabelEncoder
df['species'] = LableEncoder().fit_transform(df['species'])
# 분석 데이터셋 준비 (특성만 사용, species 제외)
X = df.drop('species', axis=1)
# K-means 클러스터 객체 생성
cluster1 = KMeans(n_clusters=3, n_init=10, max_iter=500, random_state=42)
# 생성 모델로 데이터 학습
cluster1.fit(X)
# 결과 값을 변수에 저장
cluster_center = cluster1.cluster_centers_ # 각 군집의 중심점 결과 저장
cluster_prediction = cluster1.predict(X) # 각 예측군집 결과 저장
print(pd.DataFrame(cluster_center))
print(cluster_prediction)
# 기존 데이터에 예측된 군집 결과 붙여서 출력해보기
df['cluster'] = cluster_prediction
df
# 적정한 K에 대해 붓꽃 데이터프레임을 넣어 K에 따른 inertia를 비교
# 값(3)이 적합한 변화 시점 임을 알 수 있음
scope = range(1,10)
inertias=[]
for k in scope:
model = KMeans(n_clusters=k, n_init=10, max_iter=500, random_state=42)
model.fit(X)
inertias.append(model.inertia_)
print(k,inertias[k-1])
inertia : 각 군집별 오차의 제곱의 합 = 군집 내 분산
K가 증가하게 되면 샘플이 할당된 centroid에 근접하므로 inertia가 감소하게 된다.
elbow 기법은 inertia가 빠르게 줄어드는 변화시점을 최적의 K로 설정하는 방법이다.
| 척도 | 정의 및 예시 | 수식 | 의미 |
|---|---|---|---|
| 지지도 (Support) | - 전체 거래 중에서 특정 항목이나 항목 집합이 등장하는 비율. - 예시: 전체 거래 수가 1000건이고, 그 중 200건에서 빵과 버터가 함께 구매되면, 지지도는 . 즉, 20%의 거래에서 두 항목이 함께 등장. | - A와 B를 모두 포함하는 거래 비율. - 값이 클수록 두 항목 간의 연관도가 높음. | |
| 신뢰도 (Confidence) | - 항목 A가 있을 때 항목 B가 등장할 확률. - 예시: 빵을 구매한 300건 중 200건에서 버터도 구매했다면, 신뢰도는 . 즉, 빵을 구매한 고객 중 67%가 버터도 구매. | - A가 구매되었을 때 B가 함께 구매될 확률. - 두 항목 간의 관계가 강할수록 값이 큼. | |
| 향상도 (Lift) | - A와 B가 독립적일 때보다 함께 등장할 확률이 얼마나 향상되었는지를 측정. - 예시: 신뢰도가 0.67이고 버터의 지도가 0.2라면, 향상도는 . 즉, 빵과 버터는 독립적일 때보다 3.35배 더 자주 함께 구매됨. | - A와 B가 독립적인 관계일 때보다 함께 등장할 확률이 얼마나 향상되었는지. - 값이 1보다 크면 두 항목은 독립적이지 않음. |
import numpy as np
import pandas as pd
# apriori, association_rules 호출
from mlxtend.frequent_patterns import apriori, association_rules
# 데이터 불러오기
df = pd.read_csv('retail_dataset.csv')
# 장바구니 데이터 고유항목 구분 출력
items = set()
for col in df:
items.update(df[col].unique())
# 장바구니 목록 값을 수치로 표현 - 각 항목별 매칭될 경우 1로, 아니면 0으로 표시 (one-hot encoding)
itemset = set(items)
encoding = []
for index, row in df.iterrows():
rowset = set(row)
labels = [0] * len(itemset)
dismatching = list(itemset - rowset)
matching = list(itemset.intersection(rowset))
for i in dismatching:
labels[i] = 0
for j in matching:
labels[j] = 1
encoding.append(labels)
encoding[0]
result = pd.DataFrame(encoding)
result
ttest_1samp 함수를 활용하여 검정 통계량과 p-value를 구한다.t.interval 함수를 사용한다.shapiro)을 통해 데이터의 정규성을 확인.ttest_rel 함수를 사용하여 평균 차이를 검정.chi2.cdf를 통해 p-value를 산출.chi2_contingency 함수로 관찰 빈도와 기대 빈도 간 차이를 기반으로 검정 수행.pandas.crosstab을 사용.