# 뉴스에서 관련주 추출 ###### tags: `final-project` ## 1. 배경 매일 쏟아지는 뉴스에서 단타,장타등 주식에 투자하는 사람들은 실적발표, 사건사고, 제품 출시등을 통해 거래가 이루어진다. 이런 거래는 본 제품과 관련이 있는 회사의 주식이 상승하기도 하지만 관련주 또한 같이 상승하게 된다. 따라서 새로운 뉴스에 따른 빠른 관련주의 주식확인이 필요하다. ## 2. 아이디어 개요 주식투자자를 위해 오늘의 뉴스를 통해 관련된 종목을 찾아보자. 관련주의 정의는 사업관련 분야, 종목과 지분 관계, 사업 관계등으로 정의해볼수 있고, 뉴스를 통해 해당 관련주를 제공하려고 한다. ## 3. 데이터 수집 - 네이버 뉴스 API 하루 25,000건 - DART OpenAPI로 사업 보고서 텍스트 추출 - (필요시) 네이버 파이낸스 주가 API - 뉴스의 수집주기 (realtime, 6시간, 하루) - 다음뉴스의 경우 크롤링 가능 #### 3.1. 네이버 뉴스 - 뉴스데이터 : 기존 데이터셋 사용 - 뉴스데이터를 어디에서 어떻게 수집할 것인지? - 어디서: 네이버 뉴스 API (25000건), 가능하면 인포스탁(주식 관련 뉴스) 사용 - 무엇을(분야?): 속보, 정치, 경제, 사회, 과학, 세계, IT, 오피니언, - 얼마만큼: 위키(60000만개)정도? - 어떻게: API활용 - 저작권 여부: CC-NC 라이센스 확인필요 - 데이터의 column종류: "날짜", "분야", - 쓸만한 기사를 어떻게 선정할 것인지? #### 3.2. DART - DART -> 성공 - 다트의 분기 보고서/반기 보고서/ 기타 등등... - Sparse Embedding: 추가적인 데이터 필요 없음 - Dense Embedding: "뉴스 기사 <-> 기업 매칭" 레이블링 필요함 - STS의 경우 문장이 짧아야 성능이 좋음, 정제과정 필요 - 기업 DB로 클러스터링 작업, 기사의 카테고리에서 가지고 있는 관련 기업을 추천 - 업종별 세부기업 fn_guide, (WICS)[wiseindex.com] #### 3.3. 사전 뉴스데이터 - [뉴스 문서 요약](https://ai-korea.kr/playground/selectPlaygroundTask.do) - [](https://aihub.or.kr/aidata/8054) ## 4. 구현방법 ### 4.1. 관련주 리트리버 구현방법 (모델링) #### 4.1.A. 뉴스에서 키워드 추출 -> 리트리버 - 키워드 추출을 어떻게 할지? - 모델1.a: 뉴스텍스트 -> 키워드 추출(형태소분석) -> 명사빈도 중요도 순위 할수 없을까?(TF-IDF, bm25) "오늘", "점심", "날씨", "도시락" 명사중, 자주 등장 단어가 다뽑히는데 BM25로 한번 뽑아봐야알듯? - 뉴스 -> 형태소분석(명사) -> BM25 (경제뉴스 + 필요 시 정치 기사 포함) - 뉴스 -> BM25 - 불용어를 어떻게 걸러낼 것인가? 기사를보고 빼야함 - 기사제목과 관련도가 0.7이상인 단어만 추출 - 모델1.b: 뉴스 -> 요약 - 요약한 문장을 모델2에 question으로 넣어보면? "삼성전자의 컨트롤타워 부재, 투자 감소" 테스트 - 모델2: 키워드에 맞는 -> 관련주 (qa) or (기사 & 기업 유사도) question "2차전지와 관련된 주는?" answer "바이오, 셀트리온" - 납득할만한 수준의 관련주가 나오는가? #### 4.1.B. 뉴스에서 사업보고서 바로 추출 - 모델 3: 뉴스텍스트 -> 사업보고서 물어오기 (DPR -> 굳이 DPR일 필요는 없지만... spare embedding을 하면 딥러닝 NLP을 적용하는 관점에서 어떻게 어필할 수 있을지 고민이 필요함) - 데이터형식: question(뉴스) -> wiki(dart) - papers with code의 similarity task에 대해 research 필요 - (ODQA로 풀기도 가능) - Q."셀트리온의 주주는?" A:"셀트리온의 주주는 xx입니다." - Q."셀트리온의 사업은?" A:"셀트리온의 사업은 xx입니다." ### 4.2. 서빙 - 추후 업데이트 예정 - mongodb, flask, django ## 5. 검증 - eval 데이터셋을 사람이 직접 라벨링 - similarity.? ## 6. 부가기능 - 관련주를 먼저 뽑고, 기업의 사업보고서(분기) 요약 정리해서 보여주자 - 관련주 10개의 기업에 대해서 핵심기사 3개를 뽑아주는것도. - 테마에 따라 알람 - 최신뉴스가 나오면 새로운 관련주를 추천 ## 7. 업무 기한 데이터 수집 : 21년 11월 29일(월) - DART : 내일까지 가능. 파일럿 오늘 자정까지. - 네이버 뉴스 API : 조금 걸릴 수 있음(주말쯤?) - 전처리된 뉴스데이터셋 : 이미있음 모델별 데이터 전처리 : ## 업무 분할 0. 데이터 수집: - (DART) 백재형 - (네이버뉴스 API) 송민재 - (전처리된 뉴스) 나요한 => 허깅페이스로 만들기 1. 데이터 전처리: - DART 데이터 전처리 : 백재형, 홍석진, 이호영 - NAVER API 전처리 : 정찬미, 한진 - Augmentation(필요시) : 송민재, 정찬미, 이호영 2. 모델링: - NER 추출 후 리트리버(1.a) : 나요한, 송민재, 이호영 - 문서 요약 후 리트리버(1.b) : 정찬미, 한진 - 뉴스 전체 데이터로 리트리버(2.b) 백재형, 홍석진 3. 서빙: ## 예상 결과 ## 처음에 쓴 내용 민재님 아이디어 구체화 - Problem Definition: 사람들은 뉴스 핫한 주제에 대해 연관된 기업을 찾는다. 그런데 일일히 기업들 정보를 비교해가면서 찾아야 함. 인공지능이 현재 핫한 주제에 대해 비슷한 기업들을 추천해준다면? Reduce the problem(redefine the problem definition) - 네이버 기사 데이터를 기사 API을 사용해서 받아올 수 있음. 하루 25,000건의 api 요청 가능. - 25,000이 문서의 개수를 포함하는지는 모르겟는데... 만약 최대 받아올 수 있는 뉴스 기사 수가 25,000라면... 받아와서 캐시로 저장해두고 하루 내내 써야할 듯. - 가지고 온 문서에 대해서 df으로 만들어두고, 경제 기사만 뽑아옴. 아니면 애초에 25,000에 경제기사만 가지고 옴(가능 하다면...) - 아키텍처 A, B, ... - A안 - 모듈 1 - spare embedding 기준으로...뉴스에서 자주 등장하는 단어들에 대해서... NER 분석해서 기업을 파악? - 해당 기업들에 대한 뉴스 기사 수 distribution 구함 -> 어느 기업에 대한 기사가 가장 많은지? -> 핫한 기업 찾음 - top k 기업 선정 - 모듈 2 - top k 순위 기업을 모듈1로부터 받아옴 - 해당 기업에 대해 dart api 사용해서 사업 보고서 받음. - 해당 기업과 사업 보고서가 유사한 기업을 찾음. - 모든 기업에 대해서 찾으면 좀 느릴 것 같고... 만약 비슷한 산업 섹터 등에 대해 뭘 알 수 있다면 해당 정보 사용해서 미리 추려낼 수 있음. - 문서간 유사도 비교. 1.spare retrieval(키워드 기반) 2. dense retrieval(문장 symantic 기반) => 우리가 학습해야 하는 부분? 만약 dense을 쓴다면 유사한 기업들을 학습 시켜야 한다. - 유사한 기업을 어떻게 찾는가? - 사람들이 진짜 말도 안되는 테마주를 찾는다면? - e.g. 고등학교 동창? 이런거 예측 가능...???? - 과거 주가를 봤을 때 동시에 오른 주가? - 백트래킹이라도 해야 함? - 주가 데이터를 얻으려면... 키움증권이 api 제공 함 ^^ 그래도 저작권에 대해서 확인 필요 - 주가가 동시에 올랐다고 해도 투자자들이 유사한ㄱ ㅣ업이라고 파악해서 매수로 가격이 오른건지 확인 불가. - rule based 조건이 필요할 것 같다. - 어떤 어떤 조건들이 있으면 s개의 주식 집합 S의 주가가 동일한 뉴스 기사 화젯거리 X에 대해서 함께 오르는/내리는 상황을 "연관된 주식"이라고 판별할 수 있는가? - 동일한 방향으로 상승/하락 - 단타 주식을 파악할 수 있는 지표가 있는가? - 비슷한 산업군 - 오징어게임/지옥 - 국뽕 - B안 - 모듈1에서 - 핫한... 기사? 해당 핫한 주제의 대표적인 기사를 선정해서 모듈 2로 보냄. 모듈 2는 - 모듈2는 그 기사와 사업 보고서가 가장 유사한 기업 top n 찾음. A와 마찬가지로 spare & dense retrieval. - problem re-definition: NER으로 기업 분류를 잘 하자. 리트리버로 유사도 높은 사업 보고서를 잘 가지고 오자. - 기타 사항 - 경제 domain에 대해서 domain adaptation 필요할 수도? - dense encoder 2개를 학습시키는데... 다양한 아키텍처 사용 가능. - MRC에서 팠던 한 우물을 여기에 부읍시다! 1. 네이버 뉴스에서 핫한 주제의 기사들에서 NER task로 기업 이름(혹은 주제)을 뽑는다. 2. NER태깅을 통해 관련 기업을 연결 3. 연결된 관련주에 요약본을 순서대로 제안 ### 제안드린 것 어떤일이 발생을 함(뉴스) -> 이거의 관련주가 뭐지? (오는주가 뭐지?) 사용자 : 주식에 관심이 많은사람 우량주보다는 테마주에 투자하려는 사람 입력 : 뉴스 텍스트나 뉴스 링크? 모델 : 아웃풋 : 관련있는 회사 + 회사의 정보(요약) ### 재형 사용자 : 주식에 관심이 많은사람 우량주보다는 테마주에 투자하려는 사람 입력 : 없음. 네이버 기사 API 가지고 와서 가지고 와서 자동으로 핫한 기사의 기업을 뽑아서 관련 기업 아웃풋. 아웃풋 : 관련있는 회사 + 회사의 정보(요약) ### 석진 어떤 일이 발생을 함(뉴스)(뉴스는 직접 볼거라고 생각 그정도는 해야지 인간적으로) -> 이거 산업 유망해보이는데? or 이거 오늘 한탕할 각인데? -> 이 산업이 오늘 메인이다! -> 그럼 비슷한 기업 뭐 있지? 사용자 : 주식에 관심이 많은사람 우량주보다는 테마주에 투자하려는 사람 입력 : 키워드(2차전지, DRAM 등) 아웃풋 : 관련있는 회사 몇 군데 + 그에 대한 회사의 정보(dart에 공시된 내용 기반 요약) ### 한진 뉴스를 사용하는 이유 : 빠르게 정보를 얻기 위해 요구 사항 : 관련 테마에 대해 빠르게 정보를 얻어야함 테마를 등록해 놓으면, 테마 관련기사와 그 관련주들을 제공(알림기능을 제공하는게 좋을 듯) 최신 정보를 제공해야하기 때문에 뉴스기사를 받아오는 주기가 짧아야한다. 인풋 : 테마 등록 아웃풋 : 등록된 테마를 기준으로한 기사와 관련 주 뉴스 나옴-> 해당 뉴스를 요약 or NER Tagging을 통해 주제 추출 -> 주제를 가지고 관련 주를 제공 ### 요한 서비스 관점에서 보면, 사용자는 뉴스와 가장 빠르게 관련주를 보고 싶을것이다. 따라서 매 순간 들어오는 뉴스를 가장 빠르게 분석해서 인풋: 뉴스 모델 : Black box에서는 기업관의 관계를 알고있는 알고리즘 (DART 등으로 모델학습) 아웃풋: 관련주 ### 호영 서비스 사용자가 어떤 키워드를 입력하면 해당 키워드 관련 최신 뉴스에서 큰 변화가 있는 키워드에 대해서 여러 기업들의 사업 보고서에 해당 키워드 관련 글들을 보여주는 것 ### 찬미 기본 내용은 민재님과 동일함 테마 관련주를 정하는 기준이 있어야 할 것 같음 --- ### 혼종 기능 1. 사용자가 뉴스텍스트를 입력하면 거기에 관련된 관련주 보여줌 ``` 전두환 전 대통령이 사망한 23일 배달 애플리케이션에는 의외의 메뉴가 인기 검색어에 등장했다. 이날 오전 11시 타코야끼는 검색어 10위에 올랐고, 한 시간 뒤 4위에 오르더니 오후 4시에는 1위에 올랐다. 배달의 민족은 검색 홈에 ‘인기 검색어’를 노출해 이용자들의 메뉴 결정을 돕고 있다. 인기 검색어는 특정 집계 시간동안 사용자가 검색한 특정 검색어가 과거 집계시간과 비교하여 다른 검색어에 비해 상대적으로 유입수가 증가하고, 순위가 급격하게 상승한 비율을 종합적으로 고려하여 순위를 선정하게 된다. 피자, 치킨, 족발 등의 메뉴는 인기 검색어에 자주 노출되는 메뉴다. 배민은 “인기검색어는 특정검색어의 유입수가 증가하거나 순위가 급격하게 상승하는 등의 경우 내부적으로 정한 기준에 따라 순위를 결정한다. 배민은 사용자의 검색어를 인위적으로 조정하거나 개입하지 않는다”라고 공지하고 있다. 이날 타코야끼를 시킨 이용자는 음식 사진과 함께 리뷰를 남겼다. A씨는 음식 맛에 대한 평가에 앞서 “다시는 저런 사람이 안 나타나면 좋겠습니다. 희생당하신 분들의 명복을 빕니다”라며 전두환씨의 사망을 간접적으로 언급했다. 한편 전두환씨는 이날 오전 8시 40분쯤 자택 화장실에서 쓰러져 오전 8시 55분쯤 경찰과 소방에 신고됐으며, 경찰은 오전 9시 12분쯤 사망 사실을 확인했다. 전씨는 최근 알츠하이머와 혈액암의 일종인 다발성 골수종 등의 지병을 앓았다. 생의 마지막 날까지 자신의 과오에 대한 일말의 사과나 반성을 하지 않았다. ``` 0) 뉴스데이터 수집 x 네이버 증권의 테마주 그걸 수집한 뒤에 다트에서 테마주의 내용을 가져와서 요약. -> 요약(어떻게 요약을 잘하지) -> 텍스트 유사도 검출(요기에 조금더) + 요약 1) 뉴스원본그대로 입력 -> 뉴스텍스트 - 사업보고서 - 추가 토의 a.뿐만 아니라 다트에 별별 text 있음. 전문가 의견, 회사 개요, 자본흐름 ... 이 문서들 중에 뭘 선택할지. b. "관련되어 있다는게 다트 문서만으로 충분할 것인가?" => 다트는 사업의 질이 동일한 기업만 확인 가능... 2) 뉴스에서 키워드 추출 -> 키워드 - 사업보고서 기능 2. 키워드(2차 전지등)를 검색하면 거기에 관련된 관련주를 보여줌 (사실 이부분은 뉴스 필요없을 것 같음) ---------------------------------------------------------- 기능 3. 내가 관련되어있는 테마주를 등록해놓으면 관련 뉴스가 나왔을때 알림기능을 제공 기능 4. 홈페이지에서는 최신 뉴스에 기반해서(그 기사에 연관된) 특징주를 계속해서 업데이트 되고있음 ---------------------------------------------------------- 사용자 : "주식을 하는 사람들" -> "단타맨" 주가 -> 종토방 빨리 올라가는 주식? -> 관련주 입력 데이터 : "키워드" -> "뉴스?" 뉴스 vs DART 요약 vs 관련기업찾기 ~~0) 뉴스 -> 테마주 수집 -> 테마주의 다트 요약 출력 -> 요약(어떻게 요약을 잘하지) 1. 사용자의 입력 : 범주내의 키워드(DB에 존재하는) ![](https://i.imgur.com/yoEKPP0.png) "원자력발전", "게임", "바이오시밀러", .... 2. 아웃풋 : 테마 기업 리스트 및 사업요약 "셀트리온, 화이자, : 코로나 19..." 3. 데이터 수집 : DART, 네이버 증권 테마주 경제관련 요약 데이터셋 4. 모델링 : DART 문서요약 (핵심) 파인튜닝~~