대회 소개
- 삼성카드 데이터분석 공모전이 시행되고 있다.
- 대회에 처음 참여하는
아시아경제-수강생
들을 위해 일종의 가이드라인으로 제안하고자 한다.
- 본 포스트에서는 기본적인 내용만 전달하고자 함을 밝힌다.
- Track2 과정은 마케팅 전략 제안이 중요하다!
환경 세팅
- 먼저, 데이터가 모두 한글로 구성이 되어 있기 때문에 한글파일 설정부터 진행한다.
- 한글파일 설정이 완료되면 구글 드라이브와 연동한다.
- 데이터 시각화를 진행한다.
%config InlineBackend.figure_format = 'retina'
!sudo apt-get -qq -y install fonts-nanum
The following package was automatically installed and is no longer required:
libnvidia-common-440
Use 'apt autoremove' to remove it.
The following NEW packages will be installed:
fonts-nanum
0 upgraded, 1 newly installed, 0 to remove and 39 not upgraded.
Need to get 9,604 kB of archives.
After this operation, 29.5 MB of additional disk space will be used.
Selecting previously unselected package fonts-nanum.
(Reading database ... 144579 files and directories currently installed.)
Preparing to unpack .../fonts-nanum_20170925-1_all.deb ...
Unpacking fonts-nanum (20170925-1) ...
Setting up fonts-nanum (20170925-1) ...
Processing triggers for fontconfig (2.12.6-0ubuntu2) ...
from pandas.plotting import register_matplotlib_converters
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic')
plt.rcParams["figure.figsize"] = (20, 10)
register_matplotlib_converters()
mpl.font_manager._rebuild()
mpl.pyplot.rc('font', family='NanumGothic')
fm._rebuild()
- 여기까지 실행하였으면 구글 코랩에서
런타임-런타임 다시 시작
을 클릭한다.
구글 드라이브 연동
# Mount Google Drive
from google.colab import drive # import drive from google colab
ROOT = "/content/drive" # default location for the drive
print(ROOT) # print content of ROOT (Optional)
drive.mount(ROOT, force_remount=True) # we mount the google drive at /content/drive
/content/drive
Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly&response_type=code
Enter your authorization code:
··········
Mounted at /content/drive
# import join used to join ROOT path and MY_GOOGLE_DRIVE_PATH
from os.path import join
# path to your project on Google Drive
MY_GOOGLE_DRIVE_PATH = 'My Drive/Colab Notebooks/samsung/datasets'
PROJECT_PATH = join(ROOT, MY_GOOGLE_DRIVE_PATH)
/content/drive/My Drive/Colab Notebooks/samsung/datasets
'[기타] SCDC_공모전 테이블 설명.xlsx' '[Track1_데이터4] variable_dtype.xlsx'
'[Track1_데이터1] mrc_info.csv' '[Track2_데이터1] trend_w_demo.csv'
'[Track1_데이터2] samp_train.csv' '[Track2_데이터2] 업종_예시.xlsx'
'[Track1_데이터3] samp_cst_feat.csv'
데이터 불러오기
- 패키지를 불러오기 위해
pandas
패키지를 활용하여 [Track2_데이터1]
데이터를 불러온다.
- 파일을 불러 올 때,
encoding="EUC-KR"
를 설정해서 가져온다.
import pandas as pd
trend_w_demo = pd.read_csv('[Track2_데이터1] trend_w_demo.csv', encoding="EUC-KR")
trend_w_demo.head()
|
YM |
Category |
성별구분 |
연령대 |
기혼스코어 |
유아자녀스코어 |
초등학생자녀스코어 |
중고생자녀스코어 |
대학생자녀스코어 |
전업주부스코어 |
0 |
202005 |
할인점 |
0 |
F |
high |
low |
high |
mid |
low |
low |
1 |
202005 |
취미 |
0 |
B |
high |
low |
mid |
mid |
low |
low |
2 |
202005 |
오픈마켓/소셜 |
1 |
D |
mid |
mid |
mid |
mid |
low |
mid |
3 |
202005 |
뷰티 |
0 |
D |
mid |
mid |
mid |
mid |
low |
low |
4 |
202005 |
오픈마켓/소셜 |
0 |
G |
high |
low |
mid |
mid |
mid |
low |
trend_w_demo['기혼스코어'].value_counts()
high 314088
mid 107368
low 30582
Name: 기혼스코어, dtype: int64
- 위 데이터는 전형적으로 범주형으로 구성이 되어 있다.
- 위 변수에서 고려할 것이 있다.
Category
, 성별구분
, 연령대
는 명목형 변수인데 반해
기혼스코어:전업주부스코어
의 경우는 확률이다.
- 각 스코어의 확률에 대한 정의는 다음과 같다.
- 기혼스코어 : 카드 이용 고객이 기혼일 확률
- 유아자녀스코어 : 카드 이용 고객이에게 유아자녀가 있을 확률
- 초등학생자녀스코어 : 카드 이용 고객이에게 초등학생 자녀가 있을 확률
- 중고생자녀스코어 : 카드 이용 고객이에게 중고생 자녀가 있을 확률
- 대학생자녀스코어 : 카드 이용 고객이에게 대학생 자녀가 있을 확률
- 전업주부스코어 : 카드 이용 고객이 전업주부일 확률
- 위 스코어의 데이터는 단순히
명목형
이라고 보기는 어렵다. 즉, 순위(서열)형 척도/등간척도로 봐야 할 것이다.
측정척도의 유형과 내용
- 명목척도: 범주형 데이터로 측정된 측정대상을 단순히 범주로 분류하기 위한 목적으로 숫자를 부여한 척도(수학적 가감승제 계산 안 됨)
- 순위(서열)척도: 범주형 데이터로 명목척도의 기능뿐 아니라 각 범주 간의 대소관계, 순위(서열성)에 관하여 숫자를 부여한 척도(수학적 가감승제 계산 안 됨)
- 등간척도: 연속형 데이터로 절대적 영점(
absoulute zero
)이 없으며 대상이 갖는 양적인 정도의 차이에 따라 등간격으로 숫자를 부여한 척도(수학적 가감승제 계산 안 됨)
- 예시 - 온도, 만족도(리커트척도), 충성도(리커트척도), 물가지수, 생산지수 등
- 비율척도: 연속형 데이터로 절대적 영점이 존재하며, 비율계산이 가능한 숫자를 부여한 척도(수학적 가감승제 계산 가능)
- 매출액, 무게, 가격, 소득, 길이, 부피 등)
(1) 척도와 분석 간의 관계
- 척도와 분석 간의 관계에 관한 표는 아래와 같다 (신건권, 2018).
독립변수 |
종속변수 |
분석방법 |
범주형 변수(명목, 서열) |
범주형 변수(명목, 서열) |
교차분석, 카이제곱 |
범주형 변수(명목, 서열) |
연속형 변수(등간, 비율) |
t-검증, 분산분석, 다변량분산분석 |
연속형 변수(등간, 비율) |
범주형 변수(명목, 서열) |
판별분석, 군집분석, 로지스틱회귀분석 |
연속형 변수(등간, 비율) |
연속형 변수(등간, 비율) |
상관분석, 회귀분석, 경로분석/구조방정식모델링분석 |
- 즉, 위 표를 기준으로 삼성카드를 매우 단순하게 본다면
교차분석
외에는 쓸만한 분석방법이 떠오르지 않는다.
- 그러나, 연도,
Category
, 성별구분
, 연령대
를 제외하고는 나머지 변수들을 서열 또는 등간으로 본다면 조금 더 다양한 분석 방법이 생길 수 있다.
(2) 시각화 방법
- 순위 및 서열척도를 다루는 데이터에 대한 시각화는 주로 다음과 같다.
(3) 모수 VS 비모수 통계
- 통계 분석 방법은 매우 중요하다. 일종의 가이드라인이기 때문이다.
- 모수 통계는 기본적으로 평균들의 차이를 파악해야 하기 때문에 연속형 자료형이 필요하다. 또한, 이러한 자료는 대개 정규분포라는 형태로 잘 포장되어야 하지만, 실상은 그렇지 않다.
- 이러한 경우 비모수적 검정을 실시한다.
- 비모수적 검정의 기본 조건은 모수 통계를 할 수 없는 상황이 생기면, 보다 완화된 조건으로 해석하는 것이 옳은 방법이다. (가정을 무시하는 것은 아니다!)
- 비모수 검정에는 크게 윌콕슨 순위합 검정, 윌콕슨 부호순위 검정, 프리드먼 검정, 그리고 크러스컬-월리스 검정 등이 사용된다.
- 정규성 검정에 따른 모수와 비모수 검정 방법은 다음과 같다.
- T검정
- 모수적 방법: 독립표본 T검정, 대응표본 T검정
- 비모수적 방법: 윌콕슨(Wilcoxon) 검정, 맨-휘트니(Mann-Whitney) 검정
- 분산분석
- 모수적 방법: 일원 배치 분산분석
- 비모수적 방법: 크루스칼-윌리스(Kruskal-Wallis)검정
- 관계분석
- 모수적 방법: 피어슨의 상관분석
- 비모수적 방법: 스피어만의 로 상관분석
- 삼성카드의 데이터는 일반적인 모수적 방법으로는 통계검정을 하기에는 어려움이 있다. 즉, 비모수 통계에 대한 기본적인 숙지가 필요하며, 파이썬에서 비모수 통계 소스코드 예제는 추후에 다시 정리한다.
Reference