빅데이터분석기사 실기 대비 공부 데이터자격시험 : https://www.dataq.or.kr/www/sub/a_07.do
유형 | 주요내용 |
---|---|
필답형 | ROC커브란 이상치와 결측치의 차이 이상치, 결측치 대체 방법 베깅과 부스팅의 차이 학습시 과적합, 과소적합 의미 weight 계산 방법 |
작업형1 | 이상치 대체하기(ex) 최대값을 숫자 00으로 맞추기) 결측치 대체하여 평균 비교하기 조건에 맞는 데이터 합계 구하기 |
작업형2 | 예제 문제와 비슷한 분류 문제 데이터 전처리 필요 - 정수가 아닌 string 값으로 입력된 경우, 순서형 데이터 처리 방법 등 |
주요항목 | 세부항목 | 세세항목 |
---|---|---|
데이터 수집 작업 | 데이터 수집하기 | 정형, 반정형,비정형 등 다양한 형태의 데이터를 읽을 수 있다. 필요시 공개 데이터를 수집할 수 있다. |
데이터 전처리 작업 | 데이터 정제하기 | 정제가 필요한 결측값, 이상값 등이 무엇인지 파악할 수 있다. 결측값과 이상값에 대한 처리 기준을 정하고 제거 또는 임의의 값으로 대체할 수 있다. |
데이터 전처리 작업 | 데이터 변환하기 | 데이터의 유형을 원하는 형태로 변환할 수 있다. 데이터의 범위를 표준화 또는 정규화를 통해 일치시킬 수 있다. 기존 변수를 이용하여 의미 있는 새로운 변수를 생성하거나 변수를 선택할 수 있다. |
데이터 모형 구축 작업 | 분석모형 선택하기 | 다양한 분석모형을 이해할 수 있다. 주어진 데이터와 분석 목적에 맞는 분석모형을 선택할 수 있다. 선정모형에 필요한 가정 등을 이해할 수 있다. |
데이터 모형 구축 작업 | 분석모형 구축하기 | 모형 구축에 부합하는 변수를 지정할 수 있다. 모형 구축에 적합한 형태로 데이터를 조작할 수 있다. 모형 구축에 적절한 매개변수를 지정할 수 있다. |
데이터 모형 평가 작업 | 구축된 모형 평가하기 | 최종 모형을 선정하기 위해 필요한 모형 평가 지표들을 잘 사용할 수 있다. 선택한 평가지표를 이용하고 구축된 여러 모혀을 비교하고 선택할 수 있다. 성능 향상을 위해 구축된 여러 모형을 적절하게 결합할 수 있다. |
데이터 모형 평가 작업 | 분석결과 활용하기 | 최종모형 또는 분석결과를 해석할 수 있다. 최종모형 또는 분석결과를 저장할 수 있다. |
데이터 변환
union_data['주구매지점'].astype("category") # 카테고리 내용 확인 코드
OneHot_지점 = pd.get_dummies(X_train['주구매지점']) #문자형 -> oneHot 바로 해주는 코드
데이터 split
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data,target,test_size = 0.4,stratify = target)
분류 모델
from sklearn.linear_model import LogisticRegression #Logistic Regression 모듈
model = LogisticRegression()
model.fit(train_x train_y)
모델 정확도
from sklearn.metrics import precision_score, recall_score, f1_score
from sklearn.metrics import accuracy_score
print("accuracy: %.2f" %accuracy_score(valid_y, pred_y))
print("Precision : %.3f" % precision_score(valid_y, pred_y))
print("Recall : %.3f" % recall_score(valid_y, pred_y))
print("F1 : %.3f" % f1_score(valid_y, pred_y))
이상치 탐지
q25, q75 = np.quantile(data,0.25), np.quantile(data,0.75)
cut_off = (q75- q25)*1.5 #IQR*1.5
lower = q25 - cut_off
upper = q75 + cut_off
lower_list = data[data<lower].index.tolist()
upper_list = data[data>upper].index.tolist()
회귀 평가 지표
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error, mean_squared_log_error
pred = model1.predict(x_test)
MAE = mean_absolute_error(y_test, pred)
MSE = mean_squared_error(y_test, pred)
RMSE = np.sqrt(MSE)
R2 = r2_score(y_test, pred)
Python t-test
from scipy import stats
# one sample
t, p = stats.ttest_1samp(data, mu)
# two samples
# step 1
# levene 등분산 검정
f,p = stats.levene(data1, data2)
# step 2
# 독립 t 검정
t, p = stats.ttest_ind(data1, data2, equal_var = True(or False))
작업형2번
import pandas as pd
import numpy as np
x_test = pd.read_csv('data/X_test.csv', index_col = 0)
x_train = pd.read_csv('data/X_train.csv',index_col = 0)
y_train = pd.read_csv('data/y_train.csv',index_col = 0)
#데이터 확인
print(x_train.head())
print(x_train.columns)
#결측치 확인
print(x_train.isnull().sum()) #결측치 존재 col 찾기 -> 65% 결측 : feature 삭제하기
x_train = x_train.drop('환불금액',axis = 1)
x_test = x_test.drop('환불금액',axis = 1)
#범주형, 수치형 나누기 : 데이터 처리를 빠르게 하기 위한 분리
check_col = ['주구매상품','주구매지점']
nume_col = ['총구매액','최대구매액','내점일수','내점당구매건수','주말방문비율','구매주기']
cate_train = x_train[check_col]
nume_train = x_train[nume_col]
#이상치 확인 -> 시각화가 불가능 하므로 이상치 개수가 전체의 10%가 넘지 않는 경우만 upper, lower로 대체
#나머지는 스케일로 변환
OneHot_train = pd.get_dummies(x_train[check_col])
OneHot_test = pd.get_dummies(x_test[check_col])
x_train = pd.concat([x_train,OneHot_train],axis = 1)
x_train = x_train.drop(check_col,axis = 1)
x_train = x_train.drop('주구매상품_소형가전',axis = 1)
x_test = pd.concat([x_test,OneHot_test],axis = 1)
x_test = x_test.drop(check_col,axis = 1)
log_list = ['총구매액', '최대구매액', '내점일수', '내점당구매건수','구매주기']
from sklearn.preprocessing import RobustScaler
robustScaler = RobustScaler()
x_train[log_list] = robustScaler.fit_transform(x_train[log_list])
x_test[log_list] = robustScaler.fit_transform(x_test[log_list])
#print(nume_train)
from sklearn import svm
from sklearn.model_selection import train_test_split
train_x, valid_x, train_y, valid_y = train_test_split(x_train,y_train,test_size=0.3,shuffle=True,random_state=25)
#print(train_y.values.ravel().shape)
model = svm.SVC(kernel = 'rbf', C = 10.0, probability = True)
model.fit(train_x,train_y.values.ravel())
#print(model.score(train_x,train_y.values.ravel()))
#print(model.score(valid_x,valid_y.values.ravel()))
final_model = svm.SVC(kernel = 'rbf', C = 10.0, probability = True)
final_model.fit(x_train, y_train.values.ravel())
pred = final_model.predict_proba(x_test)
#print(pred)
result = pd.DataFrame(pred,index=x_test.index)
result = result.drop(0,axis = 1)
result.rename(columns={1:'gender'},inplace=True)
result.index.name = 'custid'
result.to_csv('수험번호.csv')
- 이상치, 결측치 관련 문제
- 범주형 -> 수치형 one-hot 관련 문제
- 분류 - 세 가지 이상의 범주로 분류하기
- 회귀 - 주택 가격 예측,