# 컬럼명 확인
컬럼이 많은 경우 transpose(), T 함수를 활용하여 컬럼을 가로/세로 변경 후 조회
또는 pandas 옵션 설정
pd.options.display.max_columns = None
# 행/열 확인
shape 명령어 사용
# 요약정보 확인
info() 함수 사용
- 데이터 중 결측치가 있는지 체크
- 숫자형인지 범주형인지 타입 확인
# 기초통계량 확인
describe() 함수 사용
- 데이터의 범위 확인을 통해 데이터 스케일링이 필요한지 파악
특정 데이터가 왜곡되지 않도록 동일한 범위로 변환 필요
# 불필요한 컬럼 삭제
drop() 함수 이용
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3500 entries, 0 to 3499
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 cust_id 3500 non-null int64
1 총구매액 3500 non-null int64
2 최대구매액 3500 non-null int64
3 환불금액 1205 non-null float64
4 주구매상품 3500 non-null object
5 주구매지점 3500 non-null object
6 내점일수 3500 non-null int64
7 내점당구매건수 3500 non-null float64
8 주말방문비율 3500 non-null float64
9 구매주기 3500 non-null int64
dtypes: float64(3), int64(5), object(2)
memory usage: 273.6+ KB
None
숫자 0으로 결측치 대체 후 isnull() 함수로 확인
# 범주형 변수 인코딩하기
unique() 함수로 인코딩 전에 데이터의 값과 .siez값으로 개수를 확인
- 데이터의 종류가 많은 경우에는 라벨 인코딩이 효율적
0 5
1 21
2 6
3 5
4 15
..
3495 3
3496 22
3497 32
3498 41
3499 5
Name: 주구매상품, Length: 3500, dtype: int64
- 숫자와 매핑된 값은 classes_ 키워드로 확인
['가공식품' '가구' '건강식품' '골프' '구두' '기타' '남성 캐주얼' '남성 트랜디' '남성정장' '농산물' '대형가전'
'디자이너' '란제리/내의' '명품' '모피/피혁' '보석' '생활잡화' '섬유잡화' '셔츠' '소형가전' '수산품' '스포츠'
'시티웨어' '식기' '아동' '악기' '액세서리' '육류' '일용잡화' '젓갈/반찬' '주류' '주방가전' '주방용품'
'차/커피' '축산가공' '침구/수예' '캐주얼' '커리어' '통신/컴퓨터' '트래디셔널' '피혁잡화' '화장품']
# 파생변수 만들기
condition 변수를 활용하여 조건에 맞는 경우와 맞지 않는 경우로 파생변수 생성
환불금액 환불금액_new
0 6860000.0 1.0
1 300000.0 1.0
2 0.0 0.0
3 0.0 0.0
4 0.0 0.0
... ... ...
3495 0.0 0.0
3496 6049600.0 1.0
3497 0.0 0.0
3498 0.0 0.0
3499 5973000.0 1.0
[3500 rows x 2 columns]
# 데이터 범위 표준화 하기
describe()로 데이터의 범위를 확인
총구매액 최대구매액 환불금액 주구매상품 주구매지점 내점일수 내점당구매건수 주말방문비율 구매주기 환불금액_new
count 3.500000e+03 3.500000e+03 3.500000e+03 3500.000000 3500.000000 3500.000000 3500.000000 3500.000000 3500.000000 3500.000000
mean 9.191925e+07 1.966424e+07 8.289786e+06 14.612000 10.734286 19.253714 2.834963 0.307246 20.958286 0.344286
std 1.635065e+08 3.199235e+07 3.010204e+07 13.019947 5.636480 27.174942 1.912368 0.289752 24.748682 0.475203
min -5.242152e+07 -2.992000e+06 0.000000e+00 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 0.000000
25% 4.747050e+06 2.875000e+06 0.000000e+00 5.000000 8.000000 2.000000 1.666667 0.027291 4.000000 0.000000
50% 2.822270e+07 9.837000e+06 0.000000e+00 9.000000 9.000000 8.000000 2.333333 0.256410 13.000000 0.000000
75% 1.065079e+08 2.296250e+07 2.642250e+06 22.000000 15.000000 25.000000 3.375000 0.448980 28.000000 1.000000
max 2.323180e+09 7.066290e+08 5.637530e+08 41.000000 23.000000 285.000000 22.083333 1.000000 166.000000 1.000000
- StandardScaler 함수 호출
표준화한 후 값의 타입이 변경되기 때문에 DataFrame으로 변경하고
columns의 값도 다시 설정해 준다.
총구매액 최대구매액 환불금액 주구매상품 주구매지점 내점일수 내점당구매건수 \
0 -0.144580 -0.262608 -0.047505 -0.738357 -1.904703 -0.009338 0.554247
1 -0.549190 -0.547967 -0.265461 0.490702 1.466677 -0.635003 -0.698168
2 -0.542700 -0.563504 -0.275429 -0.661541 -1.727262 -0.635003 -0.436675
3 -0.463911 -0.460465 -0.275429 -0.738357 -1.549821 -0.046142 -0.204236
4 -0.384561 0.135544 -0.275429 0.029805 -0.485175 -0.635003 -0.698168
... ... ... ... ... ... ... ...
3495 -0.542833 -0.519615 -0.275429 -0.891990 -0.485175 -0.671807 -0.436675
3496 -0.381022 -0.389656 -0.074430 0.567518 -0.307733 -0.414180 -0.632794
3497 -0.561796 -0.612398 -0.275429 1.335680 1.821559 -0.671807 -0.959661
3498 -0.550786 -0.583480 -0.275429 2.027026 -0.485175 -0.635003 -0.959661
3499 1.047094 0.467921 -0.076975 -0.738357 -0.485175 0.689936 -0.216470
주말방문비율 구매주기 환불금액_new
0 0.758623 -0.159962 1.380060
1 -1.060530 -0.806554 1.380060
2 -1.060530 -0.806554 -0.724606
3 0.037746 -0.200374 -0.724606
4 -1.060530 2.588052 -0.724606
... ... ... ...
3495 2.391196 -0.846966 -0.724606
3496 0.532574 0.769513 1.380060
3497 -1.060530 -0.846966 -0.724606
3498 -1.060530 0.729101 -0.724606
3499 0.552777 -0.523670 1.380060
[3500 rows x 10 columns]
표준화를 하기위해서는 범주형 변수를 먼저 인코딩해야한다.
표준화 후 std값이 1에 가까워진 것을 확인할 수 있다.
count mean std min 25% 50% \
총구매액 3500.0 -1.516247e-17 1.000143 -0.882909 -0.533218 -0.389621
최대구매액 3500.0 -1.766841e-17 1.000143 -0.708278 -0.524864 -0.307219
환불금액 3500.0 -7.168115e-16 1.000143 -0.275429 -0.275429 -0.275429
주구매상품 3500.0 8.564578e-19 1.000143 -1.122438 -0.738357 -0.431093
주구매지점 3500.0 -5.034068e-17 1.000143 -1.904703 -0.485175 -0.307733
내점일수 3500.0 2.242968e-16 1.000143 -0.671807 -0.635003 -0.414180
내점당구매건수 3500.0 2.902440e-18 1.000143 -0.959661 -0.611003 -0.262346
주말방문비율 3500.0 4.038040e-17 1.000143 -1.060530 -0.966329 -0.175472
구매주기 3500.0 -1.208874e-16 1.000143 -0.846966 -0.685318 -0.321610
환불금액_new 3500.0 2.988086e-16 1.000143 -0.724606 -0.724606 -0.724606
75% max
총구매액 0.089237 13.648260
최대구매액 0.103110 21.475852
환불금액 -0.187640 18.455314
주구매상품 0.567518 2.027026
주구매지점 0.756913 2.176441
내점일수 0.211486 9.780490
내점당구매건수 0.282432 10.066639
주말방문비율 0.489224 2.391196
구매주기 0.284570 5.861421
환불금액_new 1.380060 1.380060
# 상관관계 확인
corr() 함수를 활용
금액이라고 표시된 3개의 컬럼간의 관계 확인
총구매액 최대구매액 환불금액_new
총구매액 1.000000 0.700080 0.403357
최대구매액 0.700080 1.000000 0.330687
환불금액_new 0.403357 0.330687 1.000000
총구매액과 최대구매액은 70%의 상관관계를 가지고 있어서 '최대구매액' 칼럼은 삭제 (다중공선성 제거)
60% 이상이면 강한 상관관계를 갖는다는 의미
# 다중공선성
통계학의 회귀분석에서 독립변수들 간에 강한 상관관계가 나타나는 문제
- 해결법 :
- 상관관계가 높은 독립변수중 하나 혹은 일부를 제거한다.
- 변수를 변형시키거나 새로운 관측치를 이용한다.
- 자료를 수집하는 현장의 상황을 보아 상관관계의 이유를 파악하여 해결한다.
- 주성분 분석(PCA,Principle Component Analysis)를 이용한 diagonal matrix의 형태로 공선성을 없애준다.
참고 : https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1
# 데이터 학습시키기
DecisionTreeClassifier 분류기 활용
<class 'numpy.ndarray'>
학습 후 예측된 predict의 결과는 데이터 프레임 형태가 아님
# 하이퍼파라미터 튜닝
보다 정확한 성능을 가진 모델 생성을 위해 직접 추가정보 전달하는 방법
- 여러 하이퍼파라미터 중 가장 좋은 성능의 조합을 찾는 경우 GridSearchCV() 함수 사용 가능
//하이퍼 파라미터 튜닝
from sklearn.model_selection import GridSearchCV
// 병렬처리
from sklearn.pipeline import Pipeline
파라미터변수에 여러가지 값들을 저장
파이프라인 모델 생성하고 조합할 파라미터 세트를 주입
모델 학습시키고 최적의 파라미터 추출
# 결과 예측하기
성별은 0 또는 1로 결정이 필요하기 때문에
predict_proba() 함수 이용
0 1
0 0.000000 1.000000
1 0.921569 0.078431
2 1.000000 0.000000
3 0.473333 0.526667
4 0.517544 0.482456
# 모델 평가하기
분류모델을 roc_auc_score로 평가
# 결과 제출
컬럼을 병합하기 위해 concat()함수 사용
axis = 1이면 컬럼, axis = 0은 행 기준 병합
cust_id 1
0 3500 1.000000
1 3501 0.078431
2 3502 0.000000
3 3503 0.526667
4 3504 0.482456
... ... ...
2477 5977 0.115385
2478 5978 0.538194
2479 5979 0.000000
2480 5980 0.583333
2481 5981 0.402439
2482 rows × 2 columns
컬럼명 변경
cust_id genger
0 3500 1.000000
1 3501 0.078431
2 3502 0.000000
3 3503 0.526667
4 3504 0.482456
... ... ...
2477 5977 0.115385
2478 5978 0.538194
2479 5979 0.000000
2480 5980 0.583333
2481 5981 0.402439
2482 rows × 2 columns
# 파일로 저장
index는 제외하고 저장
# 파일 검증
cust_id genger
0 3500 1.000000
1 3501 0.078431
2 3502 0.000000
3 3503 0.526667
4 3504 0.482456
... ... ...
2477 5977 0.115385
2478 5978 0.538194
2479 5979 0.000000
2480 5980 0.583333
2481 5981 0.402439
[2482 rows x 2 columns]
'독서' 카테고리의 다른 글
전처리 연습 (0) | 2022.06.18 |
---|---|
힘들고 배고픔의 가치 (0) | 2022.06.16 |
유니크한 값 구하기 (0) | 2022.06.06 |
StandardScaler (0) | 2022.06.06 |
빈도값 구하기 (0) | 2022.06.05 |