삼성카드 대회 Track-2 데이터 고려 사항 (1)

Page content

대회 소개

  • 삼성카드 데이터분석 공모전이 시행되고 있다.
    • 대회에 처음 참여하는 아시아경제-수강생들을 위해 일종의 가이드라인으로 제안하고자 한다.
  • 본 포스트에서는 기본적인 내용만 전달하고자 함을 밝힌다.
    • 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)
%cd "{PROJECT_PATH}"
/content/drive/My Drive/Colab Notebooks/samsung/datasets
%ls
'[기타] 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