최근 사내에는 AI가 큰 화두이다. 입으로 광만 파는 것이 아니라, 2000년대로 들어서며 직원들이 Excel과 ppt를 자유자재로 쓰게 되었듯, 2020년에는 AI를 자연스럽게 쓸 수 있도록 하려는 것이다. 그 일환으로 사내 AI분석 대회가 열렸는데, 회사에서 직접 만든 AI 툴로 분석을 하는 것이다. 실제 기업에서 쓰는 데이터를 가지고 분석해보는 경험을 갖고 싶었는데 마침 사내에서 간단히 참석할 수 있는 대회가 열려 결과를 제출하는데 목표를 두고 참가했다. 

 

결과는..? 나, 분석, 성공적.

 

처음 목표로 잡았던 '제출'에 성공했다. 또한 처음으로 분석의 처음부터 끝까지 고민해가며 마침표를 찍었기 때문에 뿌듯했다. 오랜만에 접하는 python과 쉽게 따라와주지 않는 손과 머리에 좌절하기도 잠깐, 이가 없으면 잇몸으로, 코딩을 못하면 노가다로 궁둥이로 버티는 힘 하나로 끝까지 놓지 않았다. 에러가 뜨지 않고 의도한 대로 코드가 구현되었을 때, 딥러닝을 돌려놓고 딴짓하면 기다릴 때, 행복했다. 제대로된, 쓸모있는 데이터 분석은 이제야 시작이지만 '할 수 있다'는 자신감을 얻게된 값진 경험이었다.

 

<문제>
- 유저의 월간 콘텐츠 이용 건수, 지출액, 장르별 콘텐츠 구매 건수, 채널별 시청 시간 데이터(X) 등으로 가장 좋아할 콘텐츠 장르(Y)를 추천하라

 

분석 과정 

1) 데이터 전처리(Null, Normalization)

- 정제된 데이터였고, Null값도 없었음

- 정규화 처리 수행

 

2) 데이터 분석(Boxplot, Correlation Analysis)

- x데이터는 수치형, y데이터는 범주형이었기 때문에 박스플롯으로 장르별 x데이터의 평균값 차이 등을 확인

- 변수가 너무 많아 모든 변수간의 상관관계를 한번에 보기 힘들어, x의 그룹별로 상관관계를 확인, 상관성이 높은 변수는 삭제해줌

 

3) 데이터 모델링(Decision Tree, XGboost, Neural Network)

- Decision Tree(60%) : 무난히 적용했지만 트리가 어떻게 구성됐는지 확인하지 못함

- Neural Network(78%) : Keras로 3Layer-NN 구축. 이것도 시간이 없어 fitting을 못했고, 정확히 내가 만든 신경망이 어떤 의미가 있는지 분석을 못함

- XGboost-1(80.5%) : 첫번째로 만든 XGboost 모델. 단순히 kaggle에서 XGboost 이용 시 성능이 잘나오더라는 카더라를 듣고 바로 적용해본거라 XGboost가 정확히 어떤 모델이고 어디에 적용하면 좋은지를 잘 몰랐음

- XGboost-2(80.3%) : 첫번째 모델에서는 age 변수를 제거했는데, 추가하고 확인해본결과 오히려 성능이 down되었음. 데이터 과적합이 일어났을수도.

-  XGboost-3(81%) : 다시 age 변수를 제거하고, 모든 변수를 다 사용하지 않고 첫번째 모델에서 확인한 변수별 importance를 사용해 importance가 10이 안되는 변수는 모두 제거하고 수행해봄. 과적합 현상이 제거되어 그런지 성능이 올라갔음. 하지만 importance 10 정도의 지표가 무엇을 의미하는지 아직도 모름.

 

4) 정답제출

- 1,2,3순위까지 예측하여 정답을 내는 문제였기 때문에, 1순위는 모델을 통해 예측한 값, 그리고 2,3순위는 모델에서 A장르로 예측하지만 실제 B장르일 확률이 가장 높은 B, 그 다음 높은 C를 직접 집어넣어주었다. 

 

 

질문

1) 주어진 데이터는 각 장르별 최대 구매 금액/중간 구매 금액/최소 구매 금액이 주어졌는데, 이 각각의 지표가 Y값을 구분하는 다른 지표로 사용이될까?

2) input data가 '월간 이용 행태'/'장르별 이용 행태'/'채널 시간별 이용 행태'의 크게 3가지 그룹으로 묶일 수 있는데, 그룹 각각에서 모델을 만드는게 좋을지, 모든 데이터를 한번에 다 사용하여 모델을 만드는게 좋은지?

3) 어떤 input data가 추가되면 좋을까?

4) 정확히 상관계수 분석은 어떨때 수행하는 것일까? 회귀분석 전에는 다중공선성 해소를 위해 상관계수가 높은 x값들은 제거해준다. 하지만 의사결정나무, xgboost, 딥러닝때도 상관계수 분석을 수행해야할까?

5) 정규화처리는 언제 해줘야할까? 변수 간에 다른 단위를 사용하는 값(금액, 시간 등)이 있었고 정규화 전/후의 결과를 비교해보았지만 예측값이 완전히 동일하게 나왔다. XGboost에서는 통하지 않는 것인가?

6) XGboost, NN모델에서 variable selection은 어떻게 수행해야할까? 

7) Age변수가 나이대별로 A01, A02 이런 식이라 모델에 넣어주기 위해서 대응하는 숫자로 바꿔줌. 이럴 경우 미치는 영향이 있을까 없을까? 모델별로 어떤 data type을 넣어야하는지 어떻게 알 수 있을까?

8) 정답 제출과정에서 단순히 1순위만 두고 나머지는 B,C를 직접 넣어주었는데, 다른 모델의 값을 넣는게 더 낫다던가 하는 방법이 있었을까?

9) 분류해야하는 장르가 10개이고, 어떤 장르는 모수 자체가 굉장히 작다. 그럴때, 모든 장르를 한번에 분류하는 분류기를 만드는게 아니라, 몇 개의 장르는 FDS 방법처럼 적용해서 단계별 종합 분류기를 만든다면?

10) 내 업무에 적용해본다면? 

- 데이터가 차곡차곡 쌓이는 B2C 기업이나, 공정데이터, 로그데이터 등이 아니면 데이터 수집 단계에서부터 적용하기 어렵다. 많으면 1년에 200건 정도인 사업이고, 각각의 사업이 분야별로 뚜렷한 특징이 있어 descriptive anlaysis 이외에 (big) data analysis 방법론을 적용하는 것은 비용낭비일 수 있다. 빅데이터 분석은 인간이 보지 못하는 인사이트를 발굴하는 데 의의가 있는데, 이 영역은 인간의 분석과 감에 크게 의존하는 영역이기 때문에... 그래도 기존 사업들을 모조리 데이터로 정리해 수/실주 Y 데이터로 낼 수 있다면 재밌을 것 같긴한데. 만약 적용한다면..각 사업마다 X지표가 있는게 있고 없는게 있어서 데이터 시스템부터 구축해야하는데 내부자 설득없이는 절대 구할 수 없고, 정확히 결과가 나온다는 보장도 없는데 내부자를 설득하는 것부터가 큰 난관이다. 내부자들은 이미 A사업 실주 이유는 B 때문이야라는 것이 확실히 있기 때문에... 그나마 확률을 예측한다는 것이 각 영업팀장이 영업이 성공할 것 같다 아니다라는 감으로 예측한 값뿐이니... B2B 분야에서 data based decision은 아직 꿈같은 이야기다..ㅎ

 

To-do

1) 데이터 분석 시각화 단계에서, 하나의 코드를 만들고 모든 변수에 각각 수작업으로 적용했는데, for문을 사용해서 자동으로 모든 변수에 대해 확인할 수 있도록 코드를 짜야지

2) Decision Tree, 어떻게 구성된건지 재확인하고 앙상블 기법 적용해보기

3) XGBoost, NN model fitting해서 최적 모델 만들기

4) 이번에는 분류 모델 정확도 측정을 Accuracy 지표만 적용했지만 다방면에서 확인해보기

5) 정답 제출 과정에서 A이면 그 다음 B, C로 데이터프레임을 만드는 코드 짜기

 

 

Lessons Learned

- 2주간의 소요 시간 중, 실제로 data분석을 수행한 것은 3일뿐. 사실 그 전에도 시도했지만, 막막할때마다 회피하고 시간을 흘려버리게 된다. 이렇게 막힐 때는, 다음에 해야할 스텝을 작은 종이에 체크리스트로 정리하면 생각을 정리하고 다음으로 나아갈 수 있게 된다!

다음으로 나아가게 도와준 체크리스트!

 

 

+ Recent posts