전체 글 38

[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..

[뉴스 크롤링] 네이버 뉴스 마지막 페이지까지 똑똑하게 검색하기 (feat.JK)

역시 사람은 똑똑하고 봐야... 지난 과정에서 파이널 프로젝트를 진행할 때, 네이버 뉴스 크롤링을 진행했다. 그 때 네이버 뉴스 검색 결과 페이지가 400페이지밖에 표시되지 않아서, 1) 월별로 마지막 페이지가 몇 페이지까지 있는지 검색한 뒤, 2) 마지막 페이지를 설정해 주었다. 프로젝트를 마무리한 뒤에도 이 부분을 (굳이) 일일이 검색하고 설정해 주어야 하나, 혹시 다른 해결책은 없나 궁금해 했었으나, 마땅한 방법을 찾지는 못했다. 그런데 이번에 NLP 과정에서 JK(네이버 뉴스 크롤링 담당)와 미니 프로젝트를 진행하며, JK가 재귀함수를 이용해 내가 궁금해 하던 부분을 간단하게 해결한 것을 보았다. 핵심은 재귀였다. 마지막 페이지까지 검색하는 법을 배웠다. 개인적으로 코딩 처음 배울 때부터 재귀가 ..

기타 2020.06.27

[트위터 크롤링] GetOldTweets3

강의 중간 프로젝트로 트위터 데이터를 크롤링했다. 트위터 크롤링은 API(공식 Standard API를 활용하더라도 수집할 수 있는 기간에 제한이 있다), Request 에러 핸들링 등으로 인해 골치가 아프다. 위의 문제에 부딪히지 않기 위해 Selenium 및 네트워크 요청 분석을 통해 코드를 짜서 스크레이핑을 진행하려 했으나, 미니 프로젝트였기 때문에, 시간이 많지 않아 성공하지는 못했다. 하루 이틀 고생했는데, 결론적으로 내가 구현하고 싶은 방법을 잘 구현해 놓은 라이브러리를 발견했다. API 없이도 이전 트윗을 수집할 수 있었다. 데이터 분석이 목적이 아니라 단순히 여러 사이트에서 데이터를 수집하는 방법을 연습하는 프로젝트였기 때문에, 어떻게 라이브러리를 활용했는지를 위주로 크롤링 방법만 기록한다..

기타 2020.06.11

[크롤링] TIL

# 궁금증 + 공부해야 할 사항 마지막 페이지 반환 시 리스트 구조 사용하면 비효율적이지 않을까? Selenium 활용 크롤링 시, Connection Error 왜 발생하나? 어떻게 해결할 수 있을까? 루리웹 커뮤니티 크롤링 시, 이전 버튼과 다음 버튼의 class, id가 모두 같아 고생했다. 수작업 말고 해결할 수 있는 방법 없나? (팀원 보배드림 사이트 크롤링 코드 참고) 정보 저장 시 JSON 활용하면 어떨까? 함수를 모듈화하려면? 지금은 한 페이지에 있어 너무 길고 지저분하다. class 사용하여 네이버 뉴스 크롤러, 커뮤니티 크롤러 모두 한 번에 활용하려면? # 느낀 점 달라들지 말자. 먼저 무슨 데이터를 얻어야 할지 생각하고, 작업을 단계별로 나누어 구조화하자. 작업 과정 틈틈이 제대로 진..

기타 2020.05.19

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

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