살아서나가자

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 머신러닝을 이용한 실시간 주식 추천 서비스

영문 : Real-time Stock Recommendation System with Machine Learning

과제 팀명

살아서나가자

지도교수

김진석 교수님

개발기간

2020년 3월 ~ 2020년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2016920022 안*(팀장)

서울시립대학교 컴퓨터과학부 2016920004 권*진

서울시립대학교 컴퓨터과학부 2012920024 박*진

서론

개발 과제의 개요

개발 과제 요약

  • 실시간으로 뉴스 자료를 수집하고, 머신러닝 기반으로 데이터를 분석한다.
  • 데이터를 분석한 결과를 활용하여 인기있는 상승주와 유사한 종목을 추천한다.

개발 과제의 배경

기계학습의 빠른 발전 아래 오늘날 기계 학습은 우리 주변의 모든 곳에 존재한다. 구글홈을 통해 전등과 TV를 끄고 페이스북에서 사진을 올렸을 때 플랫폼은 우리의 얼굴에 태그를 붙일 것을 제안한다. 기계 학습은 비단 기술 기기에만 국한 되는 것이 아니다. 최근 몇 년 사이 금융업계 내에서 기계학습이 주류가 되었다. 특히 개인의 투자 전략에 맞춰 주식 종목을 추천하거나 자동으로 주식을 매매하는 서비스 등 주식시장에서의 사용이 증가하고 있다. 주식 거래 과정은 거래자들이 결정을 내리기 위해 기술적 지표부터 기초적 정보를 바탕으로 한다. 이처럼 복잡한 과정을 기계학습을 통해 대량의 데이터를 분석하여 유의한 패턴을 찾아내고 거래자들을 탐색하여 예측 자산 가격을 측정하는 등의 과정을 대신할 수 있기 때문에 주식 투자분야에서의 잠재력은 크다고 할 수 있다. 하지만 주식 투자 경험이 부족한 사람의 경우 맞춤형 서비스를 이용하는 것에 종목에 대한 이해와 배경 지식의 부족 등으로 많은 어려움을 겪게 된다. 따라서 본 프로젝트에서는 주식 종목에 대한 설명과 종목별 뉴스 자료를 수집 및 가공하여 필요한 정보를 제공하는 프로그램을 개발한다. 서비스 이용자의 주 고객은 초보 투자자이며, 직접 종목에 대한 자료를 조사하지 않고 자동으로 추천된 결과물로 주식 투자를 할 수 있을 것으로 기대된다.

개발 과제의 목표 및 내용

  • 초보 주식 투자자들의 시선에 맞는 서비스를 제공하는 것을 목표로 한다.
  • 주식 용어, 상승주, 태그를 이용한 실시간 주식 추천 기능을 포함한 웹 사이트를 만든다
  • 주식 종목을 선택해서 해당 종목의 세부 정보를 확인할 수 있으며, 해당 페이지에서는 유사한 종목들이 추천된다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
자연어처리 NLP, natural language processing) 시장의 분류
1. 정보추출
포털사이트에서 사용자가 검색하는 행위는 사실 시스템에 데이터를 제공하는 것이다. 또한 검색 결과 중 하나를 클릭하면 시스템은 이 정보를 이용해 향후 검색에 사용하여 검색 정확도를 높인다.
[그림 1] Google BERT Michael McManus,‘Google Bert Algorithm Update’, SignatureWEB, 2019.12.17.
2019년 10월 25일 공개된 딥러닝 알고리즘으로 광범위한 자연어 처리잡업에서 단어의 뉘앙스와 문맥을 이해하여 유용한 검색결과를 보인다. 또한 특정 검색어가 포함되어도 편향성이 증가하지 않도록 설계했다고 구글은 밝혔다. BERT 알고리즘을 사용한 구글의 검색 서비스는 미국, 영어를 시작으로 지난해 24개 국가의 다양한 언어 및 지역에서 텍스트 발췌를 통해 개선진행 중이다. 한국어, 힌두어, 포르투갈어에서 지난 서비스보다 상당히 향상되었다고 밝혔다.
2. 질문답변
SLACK, Microsoft messenger, 기타 언어를 읽을 수 있는 챗 프로그램과 결합한 후 키워드를 말하면 챗봇이 활성화 된다. 예를 들어 기가지니의 경우 키워드는 ‘기가지니’로, 챗봇에는 자연어 처리 프로그램이 뒤에 숨어 상시 구동되며 키워드를 기다리고 있다.
[그림2] 챗봇 서비스 구조, Daden Limited, ‘Introduction to Chatbots’, SlideShare, 2010.10.15
- 챗봇의 종류
- 탈라: 회사 내규를 자체 검색하여 직장 관련 질문에 답한다. 예를 들어 이때까지 사용한 연차의 수나, 경리과의 전화번호 등을 질문할 수 있다.
- 세컨드마인드: 음성 검색 신생벤처로 통화 도중 음성 검색을 가능하게 하여 회계 업무 및 고객 리소스 콜 시간을 약 10배 감소시켰다고 한다.
3. 감정 분석 및 기타 (스팸인식 및 언어감지)
- 맞춤법 검사 기능: 타이핑한 단어와 사전에 등록된 단어를 대조하여 맞춤법을 검사한다.
- 메일 분류: Gmail 혹은 Outlook 과 같은 앱들은 NLP기술을 이용해 특정 발신자로부터의 이메일을 지정된 폴더에 자동으로 옮겨준다.
- 정서분석(sentiment analysis): 인스타그램, 페이스북 등의 소셜미디어에 올라온 기업관련 글들을 파악해 정서를 분석해준다. 단순 단어로부터 긍정 부정을 분류하는 것이 아니라 맥락을 고려하여 슬픔, 화, 공포와 같은 구체적인 감정을 파악함으로써 고객의 요구사항 처리를 돕는다.
[그림3] 정서분석의 단계,‘Sentiment analysis algorithms and applications’,
감정분석은 그림에서와 같이 classification 과정으로 분류될 수 있다. 분류 단계로는 Document-level, sentence-level, aspect-level가 있다. Document-level에서는 문서가 긍정 혹은 부정적 의견 혹은 감정을 포함하고 있는 지를 분석해 내는 것을 목표로 한다. 이는 문서 전체를 하나의 정보 유닛으로 간주한다. sentence-level 에서는 각 문장의 감정을 분석한다. 먼저 문장이 객관적인지 주관적인지를 분석해서, 주관적일 경우 긍정 인지 부정인지를 결정한다. 하지만 문장 또한 짧은 문서이므로 Document-level 과 sentence-level에는 근본적으로 차이점이 없다. Aspect-level은 한 개체( 핸드폰, 카메라 등) 의 다양한 특징과 특성에 대한 의견 혹은 감정을 예측한다.
국내 시장 상황
1. 코버트 (KorBERT)
한국전자통신연구원이 공개한 한국어 언어모델로, 언어처리를 위해 구글의 언어모델 버트(BERT)를 사용하였다. 이는 문장 내 어절을 한 글자씩 나눈 뒤, 앞뒤로 자주 만나는 글자끼리 단어로 인식한다. 한국어 처리 태스크에서 구글이 배포한 한국어 언어모델과 비교 평가한 결과 평균 4.5% 성능 우수하다.
[그림4] ETRI형태소 기반 언어모델과 구글 언어모델 비교, AI API-DATA
2. 카이 (khaiii)
카카오가 제공하는 딥러닝(CNN) 기반 형태소분석기 오픈소스이다. 2개 이상의 글자로 이뤄진 단어 혹은 문장을 입력할 경우 형태소 단위로 자동으로 분리하는 기술이다. 예를 들면 '학교에 간다'라고 입력하면 '학교/명사+ 에/조사+ 가/동사+ ㄴ다/어미' 로 형태소 단위와 품사를 파악해 분류한다. 딥러닝 과정에서 C++를 적용해 일반적으로 딥러닝에 쓰이는 GPU(그래픽처리장치)를 사용하지 않고도 빠른 분석 속도를 구현했다.
[그림5] 카이 정확도 그래프, 카카오
3. AIQSpell
네이버가 제공하는 검색어 교정 시스템으로 오타가 발생했을 가능성, 순서가 뒤집혔을 가능성, 그리고 사용자가 많이 찾는 검색어일 가능성 등을 조합해 추천 검색어 후보들의 최종 점수를 계산하여 적절한 검색어를 제공한다.
4. 코쿼드 2.0 (KorQuAD 2.0)
LG CNS가 국내 최초로 국내AI업계에 무료로 개방한 AI학습용 표준데이터이다. 한국어 표준데이터를 7만개에서 10개로 확대하여 장문의 답변이 가능하도록 데이터를 강화한 것이다.


  • 특허조사 및 특허 전략 분석
- 특허조사
◇ 신용진, 사주 정보를 기반으로 한 주식 종목 추천 시스템. 1020233670000.  2018.01.26. , 2019.09.16. 
◇ 주식회사 코스콤, 유사 성향 고객의 투자 패턴을 이용한 주식 종목 추천 방법 및 이를 이용한 시스템. 1020005190000.  2017.10.27. , 2019.07.10.
◇ 유안타증권 주식회사, 주식 종목 추천 시스템. 1015995760000  2013.03.12. , 2016.02.25.
◇ 오영주, 야구용어, 기술분석 및 기본분석을 이용한 주식종목 선정 시스템 및 방법. 1020180010154 2017.07.18. , 2018.01.30.
- 특허전략
◇ 관련 분야 특허시장에서는 현재 빅데이터 활용 사례가 많다. 이때 비교적 적은 규모의 자연어처리시장을 공략한다.
◇ 특허 출원 된 자연어처리를 활용한 유사 소프트웨어의 기술을 선행 조사한다.
◇ 유사 소프트웨어와의 차별점을 특정하여 특허 출원을 할 수 있다.
◇ 제공하는 서비스에 있어 선택과 집중을 통해 질적 성장을 최우선으로 한다.
  • 기술 로드맵
[그림6] 기술 로드맵

시장상황에 대한 분석

  • 경쟁제품 조사 비교
1. 증권메이트
한국예탁결제원의 주식정보서비스 오픈 API를 활용하여 개발한 프로그램이다. 제공하는 서비스로는 주식 큐레이팅-네이버-다음-팍스넷의 증권정보 제공, 관심종목, 관심키워드, 키워드 뉴스 검색이 있다.
- 주식 큐레이팅: 주식 전문 큐레이터들이 주식투자 방법을 맞춤 제공해주는 서비스이다.
- 관심종목: 종목코드 혹은 종목명 검색을 통해 관심종목을 등록하여 클릭하면 네이버에서 제공하는 종목 정보를 열람할 수 있다.
[그림7] 주식앱 ‘증권메이트’ 의 관심종목창
- 관심키워드: 관심키워드를 등록하여 클릭시 네이버 뉴스검색결과를 확인 할 수 있다.
[그림8] 증권앱 ‘증권메이트’의 관심키워드 검색 결과
- 키워드 뉴스 검색: 키워드를 입력하면 해당 키워드를 포함한 기사 헤드라인 혹은 기사 내용을 다양한 신문사로부터 검색한다.
[그림9] 주식앱 ‘증권메이트’의 키워드뉴스 검색 결과
네이버, 다음, 팍스넷의 토론 게시판을 바로 이용할 수 있도록 되어있어, 폭넓은 주식정보 습득이 가능하다. 또한 빈번한 업데이트를 통해 서비스를 주기적으로 관리한다. 그러나 키워드검색, 종목 검색의 경우 네이버 포털 하나에 의존하는 형태로 되어있어 신뢰성이 떨어지며, 계속해서 앱을 벗어나 사이트로 이동해야 하므로 로딩시간이 소요된다. 또한 앱 내 광고가 많아 화면 내 정보와 광고가 같은 페이지에 존재하는 경우 가독성이 떨어진다.


2. 증권앱 ‘스넥(SNEK)’
10만명 이상의 사용자를 보유하고 있는 주식 투자자를 위한 금융리서치플랫폼이다. 웹과 모바일서비스(안드로이드, ios) 를 모두 지원하며, 빅데이터를 기반으로 투자자가 원하는 정보들 사이 연관성을 확인하여 수많은 정보 중 투자에 필수적인 정보를 도출한다. 기존 주식 정보 검색엔진에서는 원하는 답을 얻기 위해 검색어를 포함한 문서들을 일일이 클릭해서 확인하는 것과는 달리 태그기능을 사용하여 사용자의 요구사항에 적절한 답을 도출한다. 과거 30년간 축적된 금융데이터와 공시의 금융데이터를 기반으로 검색결과를 도출한다.
- 트렌딩: 경제 관련 뉴스 중 6개를 선정해 메인화면에 띄운다. 업계의 전문가나 유명인이 직접 제공하는 오피니언을 확인할 수 있고 다른 사람들도 오피니언을 작성할 수 있도록 되어 있어 일종의 수준 높은 커뮤니티가 형성된다.
- SNECK Original : 국내외 투자, 시장 분석, 경제, IT 등의 주식관련 기사와 논평을 제공한다.
- 공시 : 기업의 재무정보 등을 제공한다.
- 기타 탭: 투자자들의 기업에 대한 의견과 애널리스트들의 기업 전망치를 제공한다.
하지만 키워드 검색과 전문가 분석을 제공하는 pro 컨텐츠의 경우 월간 약 3만원의 비용을 요구하므로 초보 주식투자자들에게는 부담이 예상된다.
[그림10] 증권앱 ‘SNEK’의 태그검색 사용 결과
  • 마케팅 전략 제시
[그림11] SWOT 분석 결과


개발과제의 기대효과

기술적 기대효과

  • 사용자에게 방대한 뉴스 데이터를 자동으로 분석한 결과를 제공
  • 머신 러닝 기법을 적용한 자연어 처리 및 추천 알고리즘을 기반으로 분석 성능을 향상
  • 자연어 처리에서 CNN 모델을 적용한 형태소 분석을 통해 뉴스 데이터로부터 정확한 키워드를 추출하여 분석의 정확성을 향상

경제적, 사회적 기대 및 파급효과

  • 초보 주식투자자들이 보다 손쉽게 주식정보를 획득하여 투자활동 활발해짐
  • 주식투자의 문턱이 낮아져 주식투자자의 수 증가
  • 프로그램 이용자가 증가함에 따라 언론 분야의 자연어처리 기술의 수요 증가

기술개발 일정 및 추진체계

개발 일정

[그림12] 개발일정

구성원 및 추진체계

  • 구성원
◇ 안*: 팀 대표이며, 프로젝트 관리에 필요한 문서 작성과 발표 자료를 제작함. 필요한 모든 설계에 함께 참여함.
◇ 권*진: 서버 개발을 담당하였으며, 필요한 모든 설계는 함께 수행함.
◇ 박*진: 클라이언트 개발을 담당하였으며, 필요한 모든 설계는 함께 수행함.
  • 추진체계
[그림13] 프로젝트 추진체계

설계

설계사양

제품의 요구사항

[그림14] 요구사항 분석

기능 정의 및 기능별 정량목표

  • 기능 정의
[그림15] 기능 정의 표
  • 기능 목록 상세내용
[그림16] 기능 목록

[|프레임|가운데|]

상세설계 내용

  • 시스템 설계
[그림17] 시스템 설계도

5개의 컨테이너는 각각 NginX, Django와 Gunicorn, RabbitMQ, celery와 Khaiii, PostgreSQL에 해당이 되며, 이는 배포 시 서버의 유지보수를 용이하게 하기 위해 사용되었다. 메시지 브로커 및 분산 태스크 큐를 사용한 이유는 주기적으로 데이터베이스에 저장된 주식 정보를 갱신하기 위함이다. 추가로 데이터를 읽고 쓰는 작업을 병렬로 처리하기 위해 데이터베이스로 PostgreSQL 을 사용하였다. 그 이유는 응답시간, 스캔 작업 및 병렬 처리 속도 측면에서 RDBMS 중 가장 가성비가 좋았기 때문이다.

아래는 설계된 시스템이 통신하는 구조를 간략화 한 것이다.

[그림18] 시스템 통신 구조

서버가 요청을 받으면 응용 애플리케이션 서버(django)는 별도의 데이터베이스 쓰기 작업을 하지 않고 항상 갱신된 상태로 여기며 데이터를 읽어와 가공하여 클라이언트에게 전달한다. 여기서 클라이언트의 요청을 받는 서버와는 비동기적으로 데이터베이스가 갱신된다.

  • 유스케이스 설계
[그림19] 유스케이스 다이어그램
- 액터목록
[그림20] 액터 목록
- 설명
  • 데이터베이스 설계
[그림21] 데이터베이스 설계
  • 인터페이스 설계
[그림22] 화면 흐름도
  • 순서 다이어그램
[그림23] 순서 다이어그램
  • 추천 알고리즘

4가지 추천알고리즘을 개발하였다. 여기서 소개된 각 알고리즘은 실제 서버에서 호출되는 함수의 기능과 동일하다.

- 뜨고 있는 종목
메인 화면에 보여지는 첫 번째 추천기능이다.
[그림24] 기능 '뜨고 있는 종목'의 순서도
처음에 데이터를 필터링하는 것은 등락률과 거래량이 0보다 큰 종목들만 남기기 위함이다. 이후에는 등락률과 거래량을 기준으로 정렬한다. 그 결과로 나온 데이터에서 각 키워드끼리 유사도를 계산하는데, 유사도 행렬(a matrix of similarity)이 반환된다. 노란색 박스 이후 내용은 상위 10개의 종목을 추출해서 각 종목별로 가장 높은 유사도를 가지는 종목을 5개씩 추출해서 총 50개의 종목을 추천한다.
- 오늘의 추천
노란색 박스 부분만 다르고 나머지는 “뜨고 있는 종목”과 동일하게 작동한다. 이전 기능과의 차이점은 유사도를 비교할 뉴스 키워드를 어떤 기준으로 뽑느냐 인데, 여기서는 상위 100개의 종목에서 무작위로 10개의 종목을 뽑은 뒤 각 종목별로 가장 높은 유사도를 가지는 종목을 5개씩 추천한다.
[그림25] 기능 '오늘의 추천'의 순서도
- 인기종목 Top 30: 거래량과 등락률 순서로 내림차순 정렬을 한 결과에서 상위 30개 종목을 추천한다.
- 태그 기반 추천
태그를 입력받아 관련 키워드를 가진 종목들을 추천하는 기능이다. Tag 페이지를 처음에 이동했을 때는 다음과 같이 디폴트 태그를 선정하여 관련 종목을 불러온다.
[그림26] 기능 '태그 기반 추천'의 순서도: 디폴트 태그
노란색 박스 부분은 디폴트 태그를 선정하는 부분이다. 처음에 필터링 및 정렬된 뉴스 데이터로부터 하나씩 키워드를 살펴보는데, 키워드의 개수가 5개 이상인 것들만 후보로 선정한다. 그 이유는 추출된 키워드가 적은 것은 뉴스 기사가 적다는 것이고 이는 최근 인기가 낮은 종목임을 의미하기 때문이다. 후보로 선정된 뉴스 데이터의 가장 빈도가 높은 키워드 3개를 디폴트 태그에 추가하게 되고 이 작업이 10번 정도 반복되면 태그 선정이 끝나게 된다. 이 기능에서는 각 종목별로 많이 언급되는 키워드를 디폴트 태그로 지정해서 Word2Vec 을 활용해 보다 다양하고 인기있는 종목들을 추천하려고 노력했다.
노란색 박스 이후부터는 Word2Vec 모델을 응용해서 각 종목별로 디폴트 태그와 비교하여 얻은 태그 스코어(tag_score)를 계산한다. 태그 스코어는 키워드 간 유사도의 평균으로 정의된다. 그리고 평균값이 높은 상위 10개를 추천한다.
디폴트태그를 사용하지 않고 사용자가 태그를 직접 입력하는 경우에는 위와 다르게 동작한다.
[그림27] 기능 '태그 기반 추천'의 순서도: 사용자 입력 시
추가로, 각 기업별로 맞춤형 추천을 하는 경우에는 같은 알고리즘을 사용하지만, 입력으로 해당 기업의 키워드를 사용한다.

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

  • 떠오르는 종목: 등락률과 거래량이 가장 큰 주식을 포함하여 관련 인기주를 추천합니다.
[그림28] 메인 화면: 떠오르는 종목
  • 오늘의 추천: 네이버주식 상위 100개 종목에서 무작위로 10개위 주식을 뽑은 후 각 종목당 관련주 5개씩 뽑아 추천합니다.
[그림29] 메인 화면: 오늘의 추천
  • 인기종목 Top 30: 현재 거래량이 많고 등락률이 높은 상위 종목 30개를 보여줍니다.
[그림30] 메인 화면: 인기종목
  • 태그 기반 추천 기능: 사용자가 입력한 태그를 기반으로 관련 주식을 추천해줍니다. 태그를 입력하지 않을 경우 미리 설정해놓은 디폴트태그를 추천합니다.
[그림31] 태그 화면: 디폴트 태그
  • 기업별 맞춤형 추천: 사용자가 웹사이트에서 특정 주식 종목을 클릭한 경우 그 기업과 관련된 주식을 추천해줍니다.
[그림32] 기업별 추천 화면
  • 주식 용어 사전: 초보 투자자들이 알아야 하는 30개의 주식 용어들을 정리한 페이지입니다.
[그림33] 주식 용어 사전
  • 골든 크로스: 단기 상승률이 높은 상위 주식 종목 15개를 추천해줍니다.

관련사업비 내역서

[그림34] 관련사업비 내역서

완료작품의 평가

[그림35] 완료작품의 평가


향후평가

어려웠던 점

추천 시스템 구현 개발하면서 가장 문제가 되었던 것은 주식 종목을 추천하는 시스템을 구현하는 것이었다. 프로젝트의 핵심 기능인 만큼 참신한 아이디어가 필요했고 활용할 수 있는 정보에 대해 고민하는데 많은 시간을 투자하게 되었다.

기본적인 아이디어는 단순히 거래량이 많고 등락률이 높은 종목들을 추천하는 것이다. 그러나 이러한 인기있는 상승주는 기존의 주식 관련 플랫폼에서 항상 제공하는 기능이기 때문에 이에 대한 변형이 필요한 상황이었다. 투자자는 기업에 대한 정보뿐만 아니라 시장의 흐름도 파악해야 하는데, 이러한 배경지식을 얻기에는 많은 시간과 노력이 필요하다. 경험이 부족한 초보자들은 정보를 어디서 얻는지부터가 난관이기 때문에 이 부분에 편의성을 제공하는 것이 추천 기능을 구현하는 첫걸음이라고 생각했다.

실제로 투자 경험이 많은 사람들이나 경제학을 연구하는 사람들은 뉴스를 많이 참고한다. 기업에 대한 가장 객관적인 정보를 제공하면서 동시에 자연어 처리에 가장 용이한 자료라는 점에서 뉴스 기사는 충분히 활용할 가치가 있었다. 생각해낸 아이디어는 뉴스 기사에서 인기있는 상승주와 함께 언급되거나 그 종목들의 뉴스 내용과 본문의 내용이 비슷한 종목들을 추천하자는 것이었다. 자동으로 데이터를 수집하고 분석하는 과정에서 머신러닝을 적용할 수 있다면 나름 괜찮은 추천 시스템이 나올 것이라 확신했다. 그리고 이 과정에서 투자자가 하나하나 뉴스를 찾아보면서 정보를 수집하고 파악하는 시간들을 줄여주는 것을 프로젝트의 목표로 두게 되었다. 여기서 문제가 되는 것은 내용의 유사성을 어떻게 판단할 지에 관한 것이었다.

흔히, 글의 유사도는 TF-IDF 방식으로 많이 비교되는데 2000개가 넘는 종목당 뉴스 기사가 몇 십개에서 몇 백개씩 있는 것을 고려하면 그다지 효율적인 방법으로 보이지는 않았다. 총 검토해야 하는 본문이 10만개는 가볍게 넘기는 분량이었기 때문에 실제로도 성능이 그렇게 좋지는 않았다. 뉴스 기사의 본문 자체를 비교하기보다 전체적인 흐름을 파악하는 것이 중요했고, 본문에 언급된 단어들만 파악하더라도 충분히 유사도를 측정할 수 있을 것으로 생각했다. 예를 들어, 코로나가 유행 중인 요즘 제약 회사의 주가가 자주 변동이 되는데 뉴스를 검색해보면 백신 개발을 하는 다른 기업 이름이 함께 언급되는 경우가 많이 있다. 실제로 함께 언급되는 횟수가 많을수록 주가의 상승세나 하락세가 비슷하다는 것은 쉽게 알 수 있었다. 따라서 뉴스 데이터를 형태소 분석한 결과를 종목별로 데이터베이스에 저장해서 그 결과에 대해 코사인 유사도를 적용해 유사성을 판단하는 알고리즘을 작성하기로 하였다. 이때 추출된 단어들은 모두 2글자 이상의 명사이며, 빈도순으로 정렬되어 데이터베이스에 저장된다. 작성된 알고리즘의 세부 사항은 “소프트웨어 설계” 부분을 참고하면 된다.

유사도를 측정하는데 이미 훌륭한 라이브러리들이 존재했기에 수학적인 계산에는 힘이 들지 않았다. 그렇기에 오히려 연산에 들어가는 입력인 형태소 분석 결과가 얼마나 정확한지가 추천 결과의 승패를 결정지었다. 주식용어나 줄임말 등 합성어 등 사전에 등록되지 않은 단어들이 뉴스에 등장하는 경우가 종종 있었다. 간단히 사전을 직접 만들어서 분석기에 설정하는 것으로 추천 성능을 올릴 수 있었다. 예를 들어, 단어 ‘골든크로스’는 단기간에 상승하는 주식을 의미하는데 인터넷에 공유되고 있는 사전을 이용할 경우 ‘골’과 ‘든크로스’가 별도의 명사로 추출되어 사용자로부터 직접 키워드를 입력받아 추천하는 태그별 추천 기능에서 유사도 비교가 제대로 되지 않는 상황이 발생했었다. 그리고 실제로 직접 사전을 만들기 전까지 이와 같은 상황이 빈번하게 발생했다. 결과적으로 주식 용어 및 복합명사나 합성어 등을 정리한 사전을 계속 업데이트해나간다면 더 좋은 결과물을 출력할 수도 있을 것 같다.


차후 구현할 내용

  • Word2Vec 모델 주기적으로 갱신
단어간 유사도를 알아내기 위해 Word2Vec 방법론을 적용하였는데, 모델을 주기적으로 갱신하는 방법을 아직 찾지 못하였다. 그 이유는 현재 소요 시간이 너무 오래 걸리고 한 번 갱신할 때마다 데이터가 너무 커서 메모리에 올리기 힘들다는 점 때문에 스크립트를 나눠서 실행해야 하는 상황이기 때문이다. 수동적으로 갱신하는 것 대신에 위 문제를 해결해서 최신 뉴스 기사들을 학습하는 모델을 사용할 수 있도록 하는 것이 앞으로 목표이다. 더 많은 뉴스 데이터를 학습할수록 다양한 주식용어와 복합명사 및 합성어를 비교 및 분석하는 것이 가능해지기 때문이다.
  • UI 개선
지금은 뷰 크기에 따라 카드 배치가 들쑥날쑥하다. 모바일에서도 깔끔하게 화면 표현이 가능하도록 개선하면 좋겠다. 그리고 메인페이지에 기능 3개가 나열되어있어 사용자입장에서는 굳이 스크롤 하지 않으면 해당 페이지에 기능이 무엇이 있는지 알지 못하고 지나칠 것 같다. 또한 향후 시장에 내놓게 된다면 메뉴바나 카드 모양, 색상 등의 디테일 측면을 더 신경을 써야 할 것 같다. 시중에 주식추천 서비스가 많으므로 시장성을 노리기 위해서는 시선을 끄는 디자인이 요구되기 때문이다.
  • 주식 관련 시각화 자료(도표, 차트) 제공
시장에 나와 있는 기존 주식추천 서비스는 대부분 주식에 대한 차트를 제공하는데, 상투적인 것 같아서 제외했었다. 하지만 향후에 시세예측 차트 등 기본적이지만 필요한 정보들을 시각화해서 보여주면 사이트를 좀 더 보기 좋게 꾸밀 수 있을 것 같다.
  • 주식 관련 정보 제공 서비스
경제, 주식관련 신문기사나 사설들을 제공하면 좋을 것 같다. 프로젝트 도중 '스넥'이라는 주식 추천 서비스를 분석했었는데, 주식 정보를 제공하고 추천서비스를 진행하니, 초보자부터 고수까지 이용자의 폭이 넓었다. 또한, 종목만 추천하는 것보다 '왜' 이 종목을 추천하는지에 대한 정보를 제공하는 것이기 때문에 서비스의 신뢰성을 높일 수 있을 것 같다.
  • 사용자 맞춤형으로 주식을 추천해주기 위해 회원 기능을 도입하면 좋을 것 같다.
  • 향후 떨어질 위험성(폭락)이 있는 주식을 예측해서 추천해주면 좋을 것 같다.