<지지/저항선 분석> - 117,000원에서 강력한 지지선이 보임, 최근 지지선을 찍고 계속 상승하는 추세 - 135,000원이 강력한 저항선이었음. 오늘 저항선을 강하게 뚫고 올라간 모습을 보임
(강한지는 사실 잘 모르겠음. 책에서는 '상한가를 갈 정도의 강한 상승'이라고했는데...넷마블은 책의 예시(2,000억)보다 시총이 훨씬 크니까(12조) 6% 상승은 강하다고 볼 수 있지않을까?) ☞ 저항선을 강하게 뚫고 올라갔을 때는매수포인트!! - 한번 저항선을 뚫고 가면 그 다음 저항선까지는 쉽게 올라간다 => 145,600원에서 다시 저항선 뚫기 테스트를 할 듯!
<재료> - 딱히 호재나 악재가 보이지 않지만, 오늘 거래량이 충분히 나와서 당분간 관심을 받고 상승할 수 있을 듯~?
<이평선_크게보기> - 지난 7월 이평선 정배열되며 상승세 시작 - 그리고, 현재 4월 이평선들이 모여들며 정배열되는 낌새를 보여줌 => 지난 7월에는 왜 상승세가 시작됐을까?
- 해당 기사에 따르면 작년 주가 상승 요인은 1) 신작 출시 2) 넷마블에서 투자했던 '빅히트', '카카오게임즈'가 IPO에 크게 성공했고 주가상승의 주요인으로 작용했던 것으로 보임
☞ 이번에 모여든 이평선에서는 큰 호재가 없으므로 작년만큼 큰 상승이 이루어질지는 모르겠다
- 신작 지연과 인건비 상승으로 목표주가 하향조정. 하지만 큰 악재 없고 올해 신작 출시가 있음 - 16만원 선에 도달할 것으로 예상
최근 사내에는 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)
- 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일뿐. 사실 그 전에도 시도했지만, 막막할때마다 회피하고 시간을 흘려버리게 된다. 이렇게 막힐 때는, 다음에 해야할 스텝을 작은 종이에 체크리스트로 정리하면 생각을 정리하고 다음으로 나아갈 수 있게 된다!
올해 목표 중 하나는 '매일 글쓰기'였다. 정말 '매일' 쓰려고 했던 것은 아니지만 그렇게 목표를 잡아야 한 달에 한 편이라도 쓸 것 같았다.
그 결과, 10월 1일 오늘까지 단 한 편의 글도 쓰지 않았다.
기나긴 취업 과정 중 가장 힘든 부분은 자소서 쓰기였다. '막연히 하기 싫음'을 넘어 '극도의 스트레스'를 받는다. 제출 마감 일주일 전부터 각 문항별 소재를 떠올리고, 질문에서 기업이 원하는 이야기를 빼놓지 않고 담고자 이리저리 배치해본다. 와중에 정작 글을 쓰지는 않는다. 더 좋은 소재가 나올 수도 있으니까. 자소서 생각에 눈 앞의 일에 집중하지 못하면서도, 이를 핑계 삼아 눈 앞의 일도 하지 않는다. 결국은 마감 전날이 된다. 노트북 앞에 앉아 유튜브를 보기 시작한다. 시작하기 위한 추진력이 필요하니까. 유튜브를 보고 나면 괜히 인스타도 한 번 보고, 핀터레스트도 들어갔다가, 그러고 보니 방이 더러운 것 같아 청소도 한 번 말끔히 한다. 글을 쓰려면 마음이 정갈해야 하니까. 앞으로 고도의 집중력을 발휘하려면 미리 당을 뇌에 채워놓아야 한다. 편의점에서 아이스크림과 과자를 사온다. 과자를 먹으면 손이 더러워지니까 키보드를 칠 수 없다. 먹는 동안만 잠깐 유튜브를 봐야겠다. 자, 이제 모든 준비가 끝났는데 왜 아직도 문장도 쓰지 못할까? 아 역시 난 집에서 집중을 못하는구나. 카페로 향해서 부랴부랴 글을 쓰기 시작한다. 결국 마감 시간을 1분 지났고 이번 채용에도 지원하지 못했다.
어떤 글을 쓰고 싶은지, 어떤 흐름인지는 머릿속에 있지만 막상 쓰려고 펼쳐놓으면 연결이 안 된다. 머릿속에서는 화려한 조명이 나를 감싸고 모두를 주목시키는 춤신춤왕이지만 실제로 춤을 추면 팔딱거리는 왕꿈틀이처럼. 머릿속에서는 대충 이렇게 쓰면 되겠다고 생각하지만 막상 쓰려고 보면 초코파이똥 같은 생각이었던 것이다. 그렇다. 생각했던 것을 구체화하는 것이 너무나 고통스러워 외면했던 것이 글을 쓰지 못했던 이유이다.
'일단 앉아서 쓰고, 일단 시작해보라'고 하는데, 쳇, 누가 그걸 몰라서 안 하나.
그래도... 할 수 있는 것이 그것밖에 없다. 누가 첫 술에 배부르겠어! 이렇게 매일 끄적이다 보면 한 편이 완성되겠지.
* 학습 목표 :기계번역의 성능을 높이기 위한 기법들(제로샷, 단일 언어 코퍼스 활용, 트랜스포머)
1. 다국어 신경망 번역
1) 제로샷 학습
- 제로샷 학습 : 전이학습(Transfer Learning)에서 발전된 기계학습의 한 종류
*제로샷 학습 : 데이터 간 관계와 공통점을 통해 정답 발견. 예를 들어, 문제 A의 정답이 B,C,D 문제에도 존재할 경우, 인공지능이 문제들의 관계를 분석해 공통점을 파악하고 그것을 중심으로 문제의 정답을 찾는 것. 데이터가 풍부하지 않은 분야에서 유용
훈련 데이터에서 상당히 누락될 수 있는 드물고, 익숙하지 않고, 보이지 않는 객체의 즉각적인 인식
매우 높은 수준의 전문 지식으로 분류된 훈련 데이터를 얻기 어려운 패턴 인식
세분화된 카테고리의 확산으로 인해 통계적으로 다양한 분류된 훈련 데이터를 충분한 양으로 획득하기 어렵거나 엄청나게 비싼 객체 클래스의 인스턴스를 탐지하는 것
제로 샷 학습을 가능하게 하는 것은 통계적 또는 의미적 접근법을 통해 발견하고 용도를 변경할 수 있는 사전 지식의 존재다. 제로 샷 방법은 이 지식을 사용해(훈련해) 본 인스턴스(훈련 데이터에 있는 인스턴스)와 보이지 않는 인스턴스(훈련 데이터에 없는 인스턴스)를 모두 포함하는 특징(feature)을 예측
book이 훈련 코퍼스에서 보지 못한 단어 시퀀스에서 나타날 확률이 더 높다고 가정하고 점수를 더 주는 것)
(3) 인터폴레이션
- 인터폴레이션 : 두 개의 다른 언어 모델을 선형적으로 일정 비율 섞어주는 것
- 특정 영역에 특화된 언어 모델 구축 시 유용한데, 일반 영역의 코퍼스를 통해 구축한 언어 모델을 특정 영역의
작은 코퍼스로 만든 언어 모델과 섞어주어 특정 영역에 특화된 언어 모델을 강화 할 수 있음. 상호보완적 역할
(4) 백오프
- n-gram의 확률을 n보다 더 작은 시퀀스에 대해 확률을 구해 인터폴레이션 하는 것
(ex> 3-gram 확률은 2-gram, 1-gram 확률을 인터폴레이션)
- n보다 더 작은 시퀀스를 활용해 더 높은 스무딩, 일반화 효과 가능
4) 결론
n-gram 방식은 출현 빈도를 통해 확률을 근사해 매우 쉽고 간편함. 하지만 단점도 명확해 훈련 코퍼스에 등장하지 않은 단어 시퀀스는 확률을 정확하게 알 수 없음. 이를 해결하기 위해 마르코프 가정을 통해 단어 조합에 필요한 조건을 간소화하고, 스무딩과 백오프 방식을 통해 남은 단점을 보완함. 워낙 간단하고 명확해 성공적으로 음성 인식이나 기계번역에 정착해 십 수 년 동안 쓰여져 옴. 하지만 여전히 근본적인 해결책은 아니라 한계가 있음. 딥러닝 시대인 지금도 n-gram은 여전히 강력하게 활용됨. 문장을 생성하는 문제가 아니라 주어진 문장의 유창성을 채점하는 경우, 굳이 복잡한 신경망없이도 n-gram 방식으로 좋은 성능을 낼 수 있음
3. 언어 모델의 평가 방법
- 좋은 언어 모델이란?
실제 우리가 쓰는 언어와 최대한 비슷하게 확률 분포를 근사하는 모델
많이 쓰는 문장은 확률 높게, 적게 쓰는 문장은 확률 적게
1) 퍼플렉서티(PPL : perplexity)
- 문장의 길이를 반영하여 확률값을 정규화한 값
- 확률값이 높을수록 PPL은 작아짐, PPL 수치가 낮을 수록 좋음
- 의미 : 뻗어나갈 수 있는 경우의 수
(ex> ppl 30인 경우, 평균 30개의 후보 단어 중에 다음 단어를 선택할 수 있다는 이야기)
- 엔트로피와 PPL의 관계는 아래식과 같음.
MLE를 통해 파라미터를 학습할 때, 교차 엔트로피를 통해 얻은 손실값에 exp를 취하여 PPL을 얻을 수 있다는 것
4. NNLM
- n-gram기반 언어 모델은 간편하지만, 단어간 유사도를 모르기 때문에, 훈련 데이터에서 못 본 단어 조합에는 취약함
- 신경망은 단어 임베딩을 사용하여 단어를 차원 축소해 단어간의 유사도를 알 수 잇고, 훈련 코퍼스에서 보지 못했던 단어의 조합을 만나더라도 비슷한 훈련 데이터로부터 배운 것과 유사하게 대처할 수 있음. 즉, 희소성 해소를 통해 좋은 일반화 성능을 가질 수 있음
5. 언어 모델의 활용
- 언어 모델을 단독으로 사용하는 경우는 거의 없지만, 자연어 생성의 가장 기본이 되는 모델이기 때문에 중요함
- 음성인식 정확도 상승(음성 인식한 후 여러 후보들 중에서 선정 가능), 자연스러운 기계번역 문장 생성, 광학문자인식 시 더 높은 성능 획득 가능
- 기타 자연어 생성 문제 : 뉴스 기사 쓰기, 뉴스 기사 요약해 제목 짓기, 사용자 응답 따라 대답 생성하는 챗봇
- 검색엔진의 드롭다운
6. 정리
- 주어진 문장을 확률적으로 모델링하는 방법인 언어모델의 필요성은 딥러닝 이전부터 꾸준히 있었음. n-gram 방법론을 통해 많은 곳에서 활용되어왔지만 단어를 불연속적으로 취급하다보니 희소성 문제를 해결하지 못해 일반화 능력에서 어려움이 있었음. 마르코프 가정, 스무딩 등을 통해 단점을 보완하고자 했지만 완벽한 해결책이 될 수는 없음
- 신경망을 통해 언어모델링을 수행하면 일반화 문제는 해결됨. 신경망은 비선형적 차원 축소에 매우 뛰어난 성능을 가지므로, 희소한 단어들의 조합에 대해서도 효과적으로 차원 축소하여 기존 훈련 데이터 내의 다른 단어 조합에 대한 유사도 비교 등을 훌륭하게 수행함. 따라서 추론 수행 과정에서 처음 보는 시퀀스의 데이터가 주어져도기존에 자신이 배운 것을 기반으로 훌륭하게 예측함