AI 25

[2] 판매실적 예측_2. DeepFM, xDeepFM 최적화

공모전의 첫 번째 문제인 판매실적 예측을 위해 모델링을 진행했다. 예측한 판매실적에 대한 성능은 MAPE로 측정한다. # Bayesian Optimization DeepFM, xDeepFM 모델의 학습 과정에서 hyperparameter의 최적값을 설정하기 위해 베이지안 최적화 방법을 사용했다. 파란색 선이 찾으려고 하는 목적함수라고 하자. 무엇인지 알려져 있지 않다. 검정색 선은 관측한 데이터를 바탕으로 예측한 목적함수이다. 알려져 있지 않은 실제의 목적함수가 존재할 만한 영역에서, Acquisition Function(아래의 그래프)에서 더 큰 값을 가지도록 하는 영역을 확률적으로 찾아 가며 최적화한다. # 사용 라이브러리 BayesianOptimization : 베이지안 최적화를 사용할 수 있도록 ..

[2] 판매실적 예측_1. DeepFM, xDeepFM 모델링

공모전의 첫 번째 문제인 판매실적 예측을 위해 모델링을 진행했다. 예측한 판매실적에 대한 성능은 MAPE로 측정한다. # 문제 상황 모델링을 진행하는 과정에서 겪었던 문제를 크게 두 가지로 요약하면 다음과 같다. 첫째, 데이터의 희소성(Sparsity)이다. 2020년 6월의 판매실적을 예측해야 하나, 주어진 데이터가 2019년(과 2020년 1월 일부)의 데이터이다. 2020년 1월부터 5월까지의 데이터가 없는 상태에서 6월의 판매실적을 예측해야 한다. 둘째, 판매실적에 영향을 미치는 변수가 너무 많다는 점이다. 홈쇼핑 판매실적은 편성 시간 외에도 소비자의 경제 상황 판단, 선호도 등 수많은 외부 변수의 영향을 받는다. 내부 데이터에 대한 EDA를 통해 상품 판매의 계절성 및 주기성, 판매 시간대의 중..

[4] GAN으로 데이터 늘리기 (feat.행복)

GAN 모델을 활용해 결측치 데이터를 불려 보기로 했다. 수업 시간에 배운 GAN 모델의 네트워크 구조를 그대로 사용한다. 이후 이전의 시계열 모형 Baseline을 수정하고, 늘린 데이터를 활용해 시계열 모델을 학습한다. 이전에도 계속 나타났던 primary key와 결측치 문제로 인해, 강사님의 조언을 얻어 데이터 feature의 개수를 3개로 제한했다. # GAN 모델링 데이터를 전처리한 후, GAN 네트워크를 사용해 데이터를 불린다. 1. 전처리 연령대(AGE), 성별(SEX_CTGO_CD), 생애주기(FLC) 피쳐만 사용한다. 사용한 피쳐에 맞게 데이터를 groupby를 통해 집계한다. 집계 후 생긴 결측치는 각 피쳐의 평균값(mean)으로 채워 주었다. 2. GAN 모델 빌드 수업 때 사용했던..

[3] LSTM으로 시계열 모형 만들기 (feat.시행착오)

2019년 1월부터 2020년 3월까지의 데이터를 가지고 2020년 4월, 7월의 데이터를 예측하는 문제이기 때문에, 시계열 모델을 만들어 보았다. 이 모델을 활용해 결측치 채우는 방법, feature engineering 방식 등을 변경해 가며 다양한 경우를 시도해 본다. # 데이터 준비 1. 곱연산 템플릿 만들기 대회 주최 측에서 제공한 데이터는 이미 각 feature(년월, 카드 이용지역, 업종, 고객 거주지역, 연령대, 성별, 가구생애주기)별로 집계된 AMT(이용금액), CSTMR_CNT(이용고객), CNT(이용건수)이다. 데이터를 이해할 때부터 힘들었던 부분이기도 한데, 각 feature별로 합계를 집계했을 때 합이 0이면, 즉, 해당하는 데이터가 없으면 제공된 데이터에 들어있지 않다. 전부 결..

[2] Gradient Boosting 알고리즘 적용해 보기

# 지난 궁금증 1. 피쳐를 추가하여 예측하면 안 되는 것인지? 2. CANCEL 변수를 만들어 확인해 보니, 취소한 경우가 압도적으로 많았다. 단순히 3범주로 나누면 안 되는 것이었나? ☞ 피쳐 추가 및 범주 개수가 문제가 아니라, 전처리 및 범주 나누는 방향을 잘못 설정한 게 아닐까 싶다. 조금 더 고민해볼 것! 3. 예측 시 단순히 average를 취하는 것 말고 지역, 업종별로 CANCEL의 가중평균을 취해준다든지, 아니면 애초에 예측 템플릿을 pd.merge 등을 활용해 CANCEL 변수만 join해주는 방법을 사용해야 할 듯하다. ☞ 애초에 예측 데이터 시계열이 달라서 CANCEL 변수 join하기는 어려울 듯하다. 생각해 보니까 데이터베이스에 대한 이해만 조금만 더 했더라면, 어차피 uniq..

[1] Baseline 이해 및 CANCEL 변수 반영

# 전처리 EDA 단계에서 판단하기로 모든 범주가 변수형이고 피쳐 수가 많지 않다. 피쳐 엔지니어링을 할 것은 없어 보인다. 또한, 애초에 컬럼이 적은데, 시군구 단위에서 세종시에 결측치가 많다. 결측치를 채울 방법이 딱히 생각나지 않기 때문에, 결측치가 있는 피쳐는 drop한다. 범주형 변수인 것만 categorical로 잘 바꿔주면 될 듯하다. # Baseline 코드 분석 대부분의 Dacon Baseline 코드가 그러하듯 RandomForest 알고리즘을 사용했다. 훈련에는 범주형 변수 7개만 사용했다. 범주형 변수를 사용했기 때문에 Scikit-learn의 LabelEncoder를 사용해 인코딩하고, 제출 파일에 디코딩하는 과정이 중요했다. 그 외에 특이한 점은 학습 및 예측을 log scale..

[4] 포털 댓글 감성 분석_3. 결과 분석

감성 분석 모델링은 순환신경망, BERT 모델에서 완료했다. 모델링 흐름도는 다음과 같다. # 모델 성능 비교 정확도를 기준으로 모델링 결과를 단순히 비교하면 다음과 같다. 대부분의 자연어 처리 태스크에서 BERT 모델의 정확도가 다른 모델들을 능가하는 것으로 알려져 있는데, 해당 프로젝트에서 모델링을 진행한 결과는 그렇지 않았다. 다만, 프로젝트가 진행될수록 일정 관리에 어려움을 겪어 BERT 모델에서 에폭 수 조정, 파라미터 조정 등 사소한 부분을 시도해보지 못한 것이 많았다는 점을 감안해야 한다. # 모델 예측 차이 정확도 외에, 각 모델이 실제로 어떻게 댓글을 예측했는지 살펴 보았다. 두 모델의 예측 결과가 다르게 나타난 댓글은 총 13만 건 정도였는데, 샘플링을 통해 랜덤으로 추출하여 어떤 차이..

[4] 포털 댓글 감성 분석_2. BERT_2. 모델링 및 예측

앞 단에 이어 모델링을 진행한다. 사전학습된 BERT 모델에 transformers 라이브러리의 분류 클래스 층을 더했다. 20200420 현재, 가장 좋은 정확도를 보인 것은 15회 학습시켰을 때 0.8678 정도였다. # GPU 설정 Keras에서와 달리, PyTorch에서 GPU를 사용할 수 있는지 알아보는 과정이 필요하다. GPU를 사용할 수 있다면, GPU를 사용하도록 장치를 설정한다. (Colab Pro 기준 : Tesla P100-PCIE-16GB) device_name = tf.test.gpu_device_name() # GPU 디바이스 이름 검사 if device_name == '/device:GPU:0': print('Found GPU at: {}'.format(device_name))..

[4] 포털 댓글 감성 분석_2. BERT_1. 사전 작업

자연어 처리 분야에서 가장 성능이 좋다고 알려진 모델은 transformer network 기반 구글의 BERT 모델(참고)이다. NLP 감성분석의 기본으로서 순환신경망 모델을 구현해 보았으니, BERT 모델에 분류층을 적용하여 결과를 비교할 것이다. Pytorch로 쉽게 BERT를 적용할 수 있게 한 Hugging Face의 transformers 라이브러리를 활용하여 작업을 진행했다. 구현을 위해 Chris McCormick의 블로그를 참고했다. # 사용 라이브러리 Pytorch Tensorflow Keras Transformers : 한국어는 bert-base-multilingual-cased 모델에 사전훈련되어 있다. pandas, numpy, tqdm # 사전 작업 데이터를 로드하는 단계까지는 ..

[4] 포털 댓글 감성 분석_1. 순환신경망_3. Word2Vec 임베딩층

Keras Embedding 레이어가 아닌, 팀 데이터셋에 맞는 Word2Vec 임베딩 층을 사용해 임베딩 층으로 주입한다. 이전의 LSTM 모델에서 임베딩 층만 달라지기 때문에, 해당 부분만 기록한다. # Word2Vec Embedding 모든 데이터셋(커뮤니티, 포털 게시글 및 댓글)을 mecab 형태소 분석기를 사용해 형태소 단위로 분석하고, Word2Vec 임베딩을 진행했다. Gensim라이브러리의 Word2Vec 모델을 사용했고, skip-gram 방식을 적용했다. 최소 등장 빈도는 5, 윈도우 사이즈는 10으로 설정하였으며, 100차원으로 임베딩하였다. 임베딩 품질을 확인하기 위해 다음의 작업을 진행했다. 첫째, 몇 가지 키워드를 선정하여 코사인 유사도가 높은 단어들을 추출했다. 어느 정도 유..