# 1. 기업 분석 ###### tags: `idea` ## 석진 #### 석진's idea #### dart(기업분석을 위한)에서 원하는 정보를 검색하자! ### 개요 https://dart.fss.or.kr/ 배경: 사회적으로 투자에 대한 관심이 높아지고, 취업난이 심해졌다. 이를 위해 기업을 분석해야 한다는 중요성은 알지만 하나하나 찾아보기 어렵다. 익숙하지 않은 사람에게는 보고서 하나하나의 내용이 너무 많다. 이를 "조금이라도 손쉽게 궁금한 것을 찾아서서 볼 수 있도록 도울 수 있지 않을까?"라는 생각에서 시작해서 기업에 대한 궁금한 점만 추출해서 제공하는 할 수 있지 않을까 생각한다. 현재 서비스 상황: - 요청한 Question(및 주어진 정보를 선택하는 방식)을 사이트에서 가져와서 답변을 돌리는 프로세스가 된다면 가장 이상적일 것이다. - 사용자를 위한 서비스적 측면이 강하니 웹이나 앱에서 서비스 형태로 구현해야 할 것으로 생각한다. ### 장점 - 기업의 공시자료를 보는 것이 익숙하지 않은 사람들의 니즈를 충족할 수 있다. - dart의 데이터는 공시가 된 것으로 출처만 밝히면 사용해도 된다. ### 단점 - 자연어로 기술과 적합한지 의문이다. - 실시간으로 하는게 어려우면 크롤링을 기업마다 해야할 수도 있다. # 재형 한줄요약: 기업 분석 # 데이터 open API 사용 ![](https://i.imgur.com/X4wchnw.png) 저작권: "누구나 사용 가능" # 토의 어떤 문제로 치환할 수 있을까? 분기별 보고서, 사업 보고서 -> 데이터 타입 : text, 재무재표(table) 끌고와도 사용자가 어디까지 볼까? -> 구체화의 필요성 배경지식이 어느정도 없으면 -> 텍스트 배경지식 있다 -> 재무재표 어떤 결정을 내리나? 살까 말까? 난해할 수 있겠다. 오히려 재무재표가 좋은 중견기업을 추천하는 태스크? 주요 분야들? # Task를 어떤 쪽으로 잡을까? 투자자 입장 QA(어떤 문장 어떻게?) 자연어 처리에 맞게 # 11월 23일 ##### 석진 웹 서비스로 산업만을 검색했을 때 (kospi 한정이 될 수도) 그 산업의 대표 (top 몇개) 기업의 주요 지표를 보여주는 서비스 1. 자연어 처리 유사도 파악을 통해 사업보고서 문장들의 유사도를 통해 관련 산업을 영위하는 기업을 찾는다. -> 랭킹을 어떻게 할 것인가? 자연어처리로 할 수 있을까? -> 관심있어할 만한 기업이 랭킹으로 가야하는 것이 맞지 않나? 리스트 뽑고 차트를 가져온다 증권사 API? 대기업만 찾아보거나 중소 선택 이런 것도 가능 네이버 파이낸스에서 api 제공 -> 시가나 일별로 가는 것도 가능 미장이 대세! 정보가 없다. 그러니까 이걸 정리한다면? 데이터?? 테마주 같은 것 추천? 2. 각 기업당 세부적인 중요 사업 포인트 요약글을 제시한다. 3. 관련 산업을 비교해서 재무재표 데이터에서 수익률 등을 제시 4. 그 산업 내에서의 평균적인 지표들과 비교해서 (ex.분기별 등) 변동을 정리해준다. ##### 호영 [기업공시 사이트 카인드](https://kind.krx.co.kr/main.do?method=loadInitPage&scrnmode=1) - DART에 없는 IPO 공시 등 신규 상장 기업에 대한 정보가 있음 - Open API가 있는가? - 데이터 저작권 문제 DART에서 투자 관련 중요 정보 - 분기 보고서 공시 내용 사업보고서와 반기보고서 모두 분기 보고서를 기초로 한다. - 감사보고서 회사의 현재 상황을 알 수 있다. 감사의견 및 재무내용 건실도 확인 전년도/당해 연도 영업 이익 및 당기 순이익이 적자인지 흑자인지 확인 가능 - 사업보고서 ##### 재형 - 애널리스트들의 정보를 끌고 와서 읽어볼텐데, 어떤 판단을 하게 될 것 - (여러 의견이 존재할테니까) - 투자자 입장에서는 더 많은 정보가 필요할 것 - 자연어로 리포트를 다 읽어서 주장의 근거에 대한 기사 리스트를 물어다 준다. - 저작권 문제. ###### xml 파싱에 성공 - 괜히 xml 라이브러리로 뻘짓 함. - 그냥 bs4을 쓸껄 그랬음... 처음에 생각을 못했었는데 여윽시 bs4! - get_text() 함수를 쓰면 text만 뽑아옴. 표는 다른 태그에 들어있어서 알아서 걸러져서 나오는 듯 하다. - library 태그로 크게 크게 내용들이 묶여 있음. - 그런데 사업 보고서 등 특정 페이지만 뽑아오기 위해서는 실험이 조금 더 필요할 것 ```py import requests url = 'https://opendart.fss.or.kr/api/document.xml' params = { 'crtfc_key': api_key, 'rcept_no': "20211115001965", } r = requests.get(url, params=params) import xml.etree.ElementTree as ET import zipfile import io #code from FinanceKR zf = zipfile.ZipFile(io.BytesIO(r.content)) info_list = zf.infolist() xml_data = zf.read(info_list[0].filename) try: xml_text = xml_data.decode('euc-kr') print("1") except UnicodeDecodeError as e: xml_text = xml_data.decode('utf-8') print("2") except UnicodeDecodeError as e: print("#") xml_text = xml_data #code from FinanceKR end !pip install bs4 from bs4 import BeautifulSoup soup = BeautifulSoup(xml_text, "lxml") len(soup.get_text()) ``` - 개행 참... ![](https://i.imgur.com/5FuFP5Z.png) - 삼전 분기 보고서 문서 길이 561,693 ㅋㅋ - 희망적인 것은 분기 보고서의 양식이 정해져있음. 모든 기업의 분기 보고서는 1. 사업의 개요 이런식으로 정해져있음. 민재님 아이디어 구체화 - 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. 질문 및 키워드를 받는다 2. 네이버 뉴스 api를 이용해 그에 해당하는 기사를 찾는다. 3. 이에 해당되는 주요 관련 키워드를 연결해 dart 사업보고서 및 세부내용과 관련된 글을 물어온다. 4. 각 기업당 세부적인 중요 사업 포인트 요약글을 제시한다. (사업보고서 등을 기준으로) - 외부데이터 X 안녕하세여 석진님 :) 하이요! ㅋㅋㅋㅋㅋ 되게 열심히 조사해놓으셨네요 민재님 아이디어가 문제 정의가 명확해서 따라서 해보니까 잘 생각이 나더라고요 xml도 어느정도 해결했고여... 저기서 프로세스가 그러면 일단 룰베이스 기반으로 키워드를 입력받고 그에 대한 사업보고서를 추려서 그 사업보고서 세부내용을 먼저 찾는게 나을까요 어쨌든 한번은 완전탐색을 하는 상황이 오게될 것 같은데 헷갈리네요ㅜㅠ 룰 베이스 기반 키워드 입력이라는게 어떤 의미이실까요? QA를 수행하기엔 성능이 솔직히 망할거같아서 특정 키워드를 입력하는 형식이라던지 문장을 이런 식으로 쓰세요라고 가정을 내려놓아야 하지 않을까 싶었어요 - 문제 정의의 범위를 축소하면 될것 같아요. "운동화 잘 파는 기업은 어디야?" "이 기업과 비슷한 사업을 가진 회사는 어디야" 뭐 이런식으로 분류를 미리 해두되 ,NLPdmㄹ 적용하니까 굳이 rule base기반으로 해야 하는지는 저는 잘 모르겠습니당... 어느정도의 자유는 줘도 성능이 나올까요..ㅋㅋㅋㅋㅋㅋ - rule base을 NLP을 안써도 되는 것 아닌가여...? 아 제가 생각한 rule base는 어느정도 규정을 잡자는 의미였어요 완전 rule based의 기법 이런 의미는 아니었어요 그런 의미라면 동의합니다 제가 적은 의미랑 크게 다르지 않은 것 같네요 네네 맞습니닷 그러면 저 부분은 어느정도 해결이 된다고 해도 결국 어떤 정보를 전달할거냐가 문제가 될텐데 그래서 아래와 같은 생각이 들었습니다. NLP을 사용해서 사용자의 입력에 대해 반환하는 정보는 QA task의 정답 이 아닌 걸까요? 그러면 아래 적으신 거랑 연관이 없어보이는데 혹시 제가 어느 부분을 잘못이해하고 있는지 알려주세요! 음 그러니까 제가 생각한건 어쨌든 1, 2번 프로세스가 끝나면 그 다음에 그 사람이 원하는 정보를 줘야하는데 그 원하는 정보라는 것의 범위를 어디까지 잡아야할까? 이게 문제였어요 문제 정의를 수정하고 싶으신걸까요? 아 재형님이 이해한 결과값이 혹시 뭔지 알려주실 수 있으실까요? 제가 생각한 방향성은; 1. 문제정의: 사용자에게 어떤 특정한 범주 안 ㅣㅡㅇQeustion을 받는다 2. 해결책: questiondㅔ 해당하는 문서를 찾는다 -> QA taskdm로 전환해서 questiondp 해당하는 값을 문서 에서 extraction 한다. 그 값을 사용자에게 반환. 이렇게 됩니다요. 석진님이 원하시는 "원하는 정보"의 범위가 1번에서 특정한 범주로 표현했고요. 아 3,4번은 약간 뺀 느낌이군요 사실 저희가 자연어를 다루는게 주니까 3,4번이 완전 필요하지 않긴해요 저거까지 고려했던 건 추가사항이긴해서 3,4번을 넣으려면 문제 정의를 바꾸면 될것 같ㄱ습니다. 어떻게 바꿀지는 고민이겠지만요. 근데 1,2번만해도 시간이 촉박할거 같긴해요 ㅋㅋㅋㅋㅋㅋㅋ 너무 단순하지 않을까 생각했었는데 생각보다 고려할게 많아서 저기서만해도 꽤나 많은 시간이 소요될 것 같아요 기사 크롤링 + 기사와 유사한 사업 보고서 찾기인가요? 사용자가 질문 -> 질문과 유사한 내용이 담긴 기사를 찾옴 -> 유사한 사업보고서 서칭 -> 요약 제공 이 프로세스가 되지 않을까요?? 진정한 의미의 odqa가 되겠는걸요..ㅋㅋㅋㅋㅋㅋㅋ 멘토님 조언처럼 질문의 범위는 저희가 정해줘야겠군요 넵넵 한정되게 사업보고서 내의 어느 파트내용? 이런 식으로 잡아야하지 않을까요? 아까 재형님이 쓴거 보니까 그래도 분리가 잘 되어있다고 느꼈는데 XML파일 리트리버의 리트리버의 리더가 필요하겠네요 기존 MRC에서 한단계 업그레이드... 성능이 똥망할수도 있겠다는 생각이 들긴하네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 안녕하세요 호영님! :100: