"강한이김"의 두 판 사이의 차이
cdc wiki
(→지도교수) |
(→프로젝트 개요) |
||
(같은 사용자의 중간 판 34개는 보이지 않습니다) | |||
11번째 줄: | 11번째 줄: | ||
===지도교수=== | ===지도교수=== | ||
− | + | 황혜수 교수님 | |
===개발기간=== | ===개발기간=== | ||
− | + | 2021년 09월 ~ 2021년 12월 (총 4개월) | |
===구성원 소개=== | ===구성원 소개=== | ||
− | 서울시립대학교 | + | 서울시립대학교 통계학과 20185800** 강**(팀장) |
− | 서울시립대학교 | + | 서울시립대학교 컴퓨터과학부 20159200** 한** |
− | 서울시립대학교 | + | 서울시립대학교 컴퓨터과학부 20179200** 이** |
− | 서울시립대학교 | + | 서울시립대학교 컴퓨터과학부 20189200** 김** |
− | |||
− | |||
==서론== | ==서론== | ||
===개발 과제의 개요=== | ===개발 과제의 개요=== | ||
====개발 과제 요약==== | ====개발 과제 요약==== | ||
− | + | * 웹 기반 실시간 멀티플레이 모의 투자 게임 제공 | |
+ | * 머신러닝 모델을 활용한 과거 주가 차트 기반 미래 주가 차트 생성 | ||
+ | * 사용자의 아이템 혹은 스킬 사용과 랜덤으로 생성되는 기업 공시 등의 주가 변동 요소 추가 | ||
+ | * 각 사용자마다 다른 역할 부여와 사용자 간 채팅 기능을 추가하여 게임 내 인터랙션 강화 | ||
+ | |||
====개발 과제의 배경==== | ====개발 과제의 배경==== | ||
− | + | * 주식 투자에 대한 흥미와 학습 유도 | |
+ | ::최근 한국을 포함해 세계 주요 증시가 오르면서, 학생들 사이에서도 주식 투자에 대한 관심이 늘고 있다. 하지만 대부분은 투자 경험도 적고 투자 관련 지식을 쌓기 위한 공부에 시간을 내기도 어렵다보니, 주식 투자에 어려움을 느끼고 쉽게 접근하지 못하거나, 기본적인 지식 없이 주변 지인의 추천이나 신뢰도가 낮은 정보에 의존해 투자하고 손실을 보는 경우도 있다. Stockcraft는 모의 주식 투자 기반 웹 게임으로, 게임 내에서 사용자가 아이템 혹은 스킬을 사용하여 흥미를 느낄 수 있는 시스템을 통해 투자에 대한 접근성을 높이고, 주식 거래 경험과 함께 기본적인 투자 상식을 얻을 수 있도록 유도하고자 한다. | ||
+ | |||
+ | * 기존 모의 투자 게임의 한계 돌파 | ||
+ | ::기존의 모의 투자 게임은 과거 특정 종목 주가 차트를 기반으로 게임이 진행되는데, 사용자가 과거 차트를 암기하는 경우에는 미래의 흐름을 완벽하게 예측하고 비정상적으로 게임을 진행할 가능성이 있다. 이와 달리 Stockcraft는 과거 주가 차트를 기반으로 새로운 주가 차트를 생성하며, 사용자가 아이템 혹은 스킬을 사용하여 주가 차트에 변동을 줄 수 있는 요소를 넣어, 사용자에게 새로운 경험을 제공해고자 한다. 뿐만 아니라 주가 차트와 함께 기업 정보를 제공하기 힘든 기존 모의 투자 게임 환경과 달리, Stockcraft는 랜덤으로 생성되는 기업 공시 정보를 추가하여 사용자가 차트 뿐만 아니라 정보를 기반으로 투자를 진행하여 건전한 투자 습관을 가지도록 유도하고자 한다. | ||
+ | |||
+ | * 사용자 간 투자 실력 비교를 통한 흥미 유도 | ||
+ | ::Stockcraft 에서는 여러 명의 사용자가 10분 내외의 짧은 시간 동안 같은 주가 차트를 보고 실시간으로 게임을 진행하여 서로 간에 투자 실력을 비교한다. 또한 특정 사용자가 아이템 혹은 스킬을 사용하거나 특정 정보를 미리 획득할 수 있도록 구성하여, 사용자 간에 인터랙션을 가질 수 있도록 유도한다. 각 사용자마다 다른 주가 차트를 바탕으로 게임을 진행하거나, 여러 사용자가 단순히 같은 주가 차트를 보고 거래하는 기존 모의 투자 게임과 달리, 여러 사용자가 함께 새로운 게임을 만들어 가도록 하여 사용자의 흥미를 높이고자 한다. | ||
+ | |||
====개발 과제의 목표 및 내용==== | ====개발 과제의 목표 및 내용==== | ||
− | + | * 10분 내외의 시간 동안 게임을 진행하며, 랜덤으로 선택된 각 기업의 특정 시기 주가 차트를 기반으로 게임을 진행하는 동안 머신러닝 모델을 활용하여 주가 차트를 생성한다. 각 게임마다 모델의 예측력에 따라 다른 주가 차트가 생성된다. | |
+ | |||
+ | ====개발 과제의 기술적 기대효과==== | ||
+ | * 최대 16인의 사용자가 웹 브라우저에서 실시간으로 소통하며 다같이 한 게임을 즐길 수 있다. | ||
+ | * 실제와 유사한 주식 차트를 생성하고, 사용자의 행동이 실시간으로 주식 차트 생성에 영향을 미친다. | ||
+ | |||
+ | ====개발과제의 경제적 및 사회적 파급효과==== | ||
+ | * 게임이라는 오락 매체를 통해 MZ세대 사이의 사회적, 정서적 교류가 더 활발해진다. | ||
+ | * 주식에 관심이 생기기 시작한 MZ세대가 주식 거래 방식과 다양한 용어를 이해하고 주식과 시장경제에 대한 관심을 키운다. | ||
+ | |||
===관련 기술의 현황=== | ===관련 기술의 현황=== | ||
====관련 기술의 현황 및 분석(State of art)==== | ====관련 기술의 현황 및 분석(State of art)==== | ||
− | * | + | * Web Socket |
− | + | ::TCP 연결에 완전 이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜. 웹소켓 프로토콜은 HTTP 폴링에 비해 더 낮은 부하를 사용하여 웹 브라우저과 웹 서버 간의 통신을 가능케 하며 서버와의 실시간 데이터 전송을 용이케 한다. 이는 클라이언트에 의해 요청을 받는 방식이 아니라 서버가 내용을 클라이언트에 보내는 표준화된 방식을 제공함으로써 또 연결이 유지된 상태에서 메시지들을 오갈 수 있게 허용함으로써 가능하게 되었다. 이러한 방식으로 클라이언트와 서버 간에 양방향 통신이 발생할 수 있다. | |
− | * | + | ::Socket.io는 node.js 기반으로 만들어진 기술로, 거의 모든 웹 브라우저와 모바일 장치를 지원하는 실시간 웹 애플리케이션 지원 라이브러리이다. 이것은 100% 자바스크립트로 구현되어 있으며, 현존하는 대부분의 실시간 웹 기술들을 추상화했다. 다시 말해, Socket.io는 자바스크립트를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술이다. |
− | + | ||
− | + | * Time Series Analysis | |
− | + | ::XGBoost 는 Gradient Boosting 알고리즘을 분산환경에서도 실행할 수 있도록 구현해놓은 라이브러리로, Regression, Classification 문제를 모두 지원하며 성능과 자원 효율이 높다. XGBoost는 여러 개의 Decision Tree를 조합해서 사용하는 Ensemble 알고리즘으로, 여러 개의 이진 노드를 겹쳐서 피쳐벌로 판단해 최종 값을 뽑아내는 형태가 된다. | |
+ | ::Ensemble 알고리즘은 여러 개의 모델을 조합해서 그 결과를 뽑아내는 기법으로, 정확도가 높은 강한 모델을 하나 사용하는 것보다, 정확도가 약한 모델을 여러 개 조합하는 방식이 정확도가 높다는 방법에 기인한다. Ensemble은 방식에 따라 Bagging과 Boosting으로 분류되는데, Bagging은 여러 모델을 사용할 때 각 모델에서 나온 값을 계산하여 최종 결과값을 내는 방식이고, Boosting은 모델에 샘플링된 데이터를 넣고 예측이 잘못된 값들에 가중치를 더해 다음 모델에 넣는 방식이다. 각 모델의 성능이 모두 다르기 때문에, 각 모델의 가중치 W를 반영하며, 여러 모델을 거쳐 최종적으로 나온 값의 오차를 줄이는 방식이다. | ||
+ | |||
+ | ::ARIMA는 AR모형과 MA모형이 결합된 시계열 예측모형이다. AR 모형은 자기 회귀모형으로, Auto Correlation의 약자이다. 자기상관성을 시계열 모형으로 구성하였으며, 이전 자신의 관측값(이 이후 자신의 관측값에 영향을 준다는 아이디어에 기반하여 예측하고자 하는 특정 변수의 과거 관측값의 선형 결합으로 해당 변수의 미래값을 예측하는 모형이다. MA 모형은 Moving Average 모형으로, 예측 오차(ε)를 이용하여 미래를 예측하는 모형이다. ARIMA(p,d,q) 모형은 d차 차분한 데이터에 AR(p) 모형과 MA(q) 모형을 합친 모형으로 자기 회귀 및 이동 평균이 모두 적용된 미래를 예측하는 모형이다. y'은 d차 차분을 구한 시계열, p는 자기회귀 부분의 차수, d는 차분 회수, q는 이동평균 부분의 차수이다. 언급된 AR(p) 모형, MA(q) 모형, ARIMA(p, d, q) 모형의 식은 각각 아래와 같다. | ||
+ | |||
+ | ::yt = c + ϕ1yt-1 + ϕ2yt-2 + ... + ϕpyt-p + εt ¨¨( 수식 1. AR 모형 ) | ||
− | ====시장상황에 대한 분석==== | + | ::yt = c + θ1εt-1 + θ2εt-2 + ... + θpεt-p + εt ¨¨( 수식 2. MA 모형 ) |
− | + | ::yt'= c + ϕ1yt'-1 + ϕ2yt'-2 + ... + ϕpyt'-p + θ1εt-1 + θ2εt-2 + ... + θpεt-p + εt ¨¨( 수식 3. ARIMA 모형 ) | |
− | + | ||
− | *마케팅 전략 제시 | + | ====특허조사 및 특허 전략 분석==== |
− | + | *인터넷을 통한 주가등락 예측게임 시스템 및 게임방법. 정희선. 1020000015515(출원 번호). 2020.03.27 (출원일). 2001.02.05 (공개일) | |
+ | ::인터넷을 통한 주가등락 예측게임 시스템 및 그 방법이 개시된다. 주가등락 예측게임 시스템은 인터넷을 통하여 주가등락 예측 게임 서버에 접속할 수 있는 회원용 클라이언트와 상기 회원용 단말기로부터 입력된 다수의 회원에 관한 정보를 저장하는 회원정보 데이터베이스와 회원들이 예측하고자 하는 주식에 관한 각종 정보를 저장하는 종목정보 데이터베이스와, 회원들이 입력한 각 종목에 대한 예측 정보를 저장하는 예측정보 데이터베이스와 각 회원들의 예측정보에 대한 결과를 저장하는 성적정보 데이터베이스와, 회원들이 예측할 대상종목을 선정하고 해당 종목에 대한 각종 정보를 상기 종목정보 데이터베이스에 입력하고, 회원들이 입력한 주가예측 정보를 실제 주식시장에서의 해당종목의 등락결과와 비교하며 비교된 결과에 따라 각 회원별 성적을 상기 성적정보 데이터베이스에 입력하는 제어부를 포함하여 구성되며, 각종 관련 데이터를 상기 클라이언트로 제공하는 서버로 이루어지는 것을 특징으로 한다. | ||
+ | |||
+ | *인공 신경망 모형을 이용한 주가 등락 예측 시스템 및 주가 등락 예측 방법. 주식회사 코스콤. 1020130163585 (출원번호). 2013.12.26 (출원일). 2014.10.29 (등록일) | ||
+ | ::본 발명은 인공 신경망을 이용한 주가 등락 예측 시스템 및 주가 등락 방법을 개시한다. 본 발명에 따른 인공 신경망을 이용한 주가 등락 예측 시스템은 복수의 증시 관련 데이터를 입력 데이터로 입력받는 입력부, 입력된 복수의 증시 관련 데이터를 제1 복수 노드에 할당하고, 제1 복수 노드에 할당된 데이터별로 제1 가중치를 적용하여 제2 복수 노드에 할당함으로써 인공 신경망 모형을 모델링하는 모델링부, 제2 복수 노드에 할당된 데이터들에 제2 가중치를 적용하여 가중합을 연산한 뒤 활성화 함수에 입력하여 싱글값으로 산출하고, 싱글값을 기 정의된 임계값과 비교하여 싱글값이 임계값보다 크면 출력값으로 하이 값을 출력하고 싱글값이 임계값보다 작으면 출력값으로 로우 값을 출력하는 출력부를 포함한다. | ||
+ | |||
+ | *주식 게임 시스템 및 이의 실행 방법. 김정웅. 1020140155537 (출원 번호). 2014.11.10 (출원일) .2016.01.06 (등록일) | ||
+ | ::본 발명의 일 실시예에 따른 주식 게임 시스템의 실행 방법은 주식 게임 서비스 제공 서버가 복수의 투자 종목 각각에 대해서 목표 수익률을 포함하는 도전 이벤트를 오픈하는 단계, 상기 주식 게임 서비스 제공 서버가 거래자에 의해 상기 복수의 투자 종목 중 특정 투자 종목에 대한 도전 이벤트가 선택되면 상기 도전 이벤트에 대한 도전을 개시하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 선택된 도전 이벤트에 대해서 해당 투자 종목의 실시간 수익률이 목표 수익률에 도달하는지 여부에 따라 승패를 결정하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 선택된 도전 이벤트에 대한 승률 정보를 집계하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 도전된 특정 투자 종목의 단일 이벤트 정보 및 상기 산출된 승률 정보를 사용자의 단말에 제공하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 특정 투자 종목의 단일 이벤트 정보에 포함된 상승 또는 하락에 대한 투자 정보를 받아보는 것에 대한 구독 구매 신청을 받는 단계 및 상기 주식 게임 서비스 제공 서버가 상기 특정 투자 종목의 이벤트가 종료되면 상기 이벤트의 승패 정보를 구독 구매 신청한 사용자의 단말에 제공하는 단계를 포함한다. | ||
+ | |||
+ | *미래 주식가격범위 결정 방법 및 그를 이용한 주가 예측 시스템. 1020200004212 (출원번호). 2020.01.13 (출원번호). 2020.08.04 (등록번호) | ||
+ | ::본 발명의 일 기술적 측면에 따른 주가 예측 시스템은, 주식정보를 수집하는 주식정보 수집부, 상기 주식정보에 대하여 텍스트 전처리를 수행하여 유효 주식정보를 생성하는 주식정보 전처리부, 상기 유효 주식정보로부터 대상 주식 및 상기 대상 주식에 대한 전망확률을 산출하는 전망확률 산출부 및 상기 대상 주식에 대한 상기 전망확률이 반영되는 요인으로서 정보반영 가속도를 산출하고, 상기 정보반영 가속도가 적용된 미래주가분포를 추정하여 상기 대상 주식의 미래 시점에 대한 추정 주가범위를 산출하는 정보반영 가중치 처리부를 포함한다. 본 발명의 일 실시형태에 따르면, 새로운 정보에 대한 지연 반영이나 정보 불균형 현상을 반영하여 미래 주식가격을 산출함으로써, 실제 주가의 변동 가능성을 보다 정확하게 예측할 수 있는 효과가 있다. | ||
+ | |||
+ | ====기술 로드맵==== | ||
+ | [[파일:강한이김-기술로드맵.png]] | ||
+ | |||
+ | ===시장상황에 대한 분석=== | ||
+ | ====경쟁제품 조사 비교==== | ||
+ | *Stocker (주식) | ||
+ | ::Ref : https://play.google.com/store/apps/details?id=com.mindknoll.stocker.client&hl=ko&gl=US | ||
+ | ::Stock'er는 실제 데이터를 기반으로 게임머니를 이용해서 투자를 간접경험할 수 있는 서비스이다. 국내 주식(코스닥, 코스피)와 해외 주식(나스닥) 시장에 대한 모의투자를 진행할 수 있는 앱이다. 게임 플레이 가능한 시간이 장중 (평일 오전 9시 ~ 오후 5시 30분)으로, 실제 투자환경과 굉장히 유사한 것이 특징이자 장점이다, 그리고 실제 존재하는 여러 종목에 대해서 실제로 트레이딩을 하는 효과를 맛볼 수 있다. 하지만 현재 상황만을 반영한 게임 플레이가 강제되므로 리플레이성이 떨어진다. | ||
+ | |||
+ | *증권사 모의투자 서비스 (주식) | ||
+ | ::Ref : https://einfomax.securities.miraeasset.com/vts/#/main | ||
+ | ::모의투자 서비스는 실제 거래와 유사한 환경을 통해 투자의 경험 및 자신의 투자 매매기법을 점검해볼 수 있는 서비스이다. 각 증권사가 제공하는 HTS(Home Trading System: 컴퓨터에서 금융 투자 거래를 할 수 있게 하는 시스템), MTS(Mobile Trading System: 모바일에서 금융 투자 거래를 할 수 있게 하는 시스템) 위에서 진행할 수 있으며, 국내주식, 선물옵션, 해외주식, 해외선물 등 다양한 주식거래를 모의로 진행해볼 수 있다. 실제 HTS와 MTS를 기반으로 동작하므로 정말 유사한 User Interface를 가지고 있다는 장점이 있다. 하지만 이로 인해서 주식을 처음 접하는 사람들이 어떤 Action을 할 수 있으며, 이에 대한 Reward를 이해하는 것에 상대적으로 진입장벽이 발생할 수 있다. | ||
+ | |||
+ | *KRX 모의증권투자게임 | ||
+ | ::Ref : http://academy.krx.co.kr/contents/ACA/02/02010400/ACA02010400P1.jsp | ||
+ | ::한국거래소에서 제공하는 주식 게임으로, 턴제 게임의 형식을 지닌다. 각 라운드는 3번의 턴으로 이루어져있으며, 1턴마다 매수와 매도를 진행할 수 있다. 실제 거래소에서 운영하다보니 정보의 제공 등 서비스가 꽤 구체적이며. 게임적으로도 재미를 느낄 수 있을만큼 흥미를 잘 유도한다. 하지만 제작된지 오래된 게임이여서 UI가 오래되어보이며 상대적으로 최신 경향을 반영하지 못하고, 싱글 플레이 기반이다보니 여러 사람과 함께 플레이하는데 제약이 있다. | ||
+ | *하나은행 X 넷마블 - 투자의 마블 | ||
+ | ::Ref : https://m.kebhana.com/cont/hidden/html/2021/giftGame.html | ||
+ | ::투자지식을 접목한 모노폴리 계열 게임으로 보드에 금융상품을 배열해 주사위를 굴려 투자 여부 및 투자 금액을 정하고 투자한 상품의 과거 2년 실제 데이터에 기반한 수익률에 따라 자산 증감을 경험해볼 수 있는 게임이다. 주식과 채권, ETF, 해외 주식 등 다양한 금융 용어를 접할 수 있다. | ||
+ | |||
+ | ====마케팅 전략 제시==== | ||
+ | *기존의 모의투자와 투자 관련 캐주얼 게임 사이에서 게임성과 주식 관련 지식에 대한 이해를 도울 수 있는 교육적인 면모를 함께 강조한다. | ||
+ | *10~15분의 상대적으로 짧은 플레이타임동안 주식의 한 사이클을 진행할 수 있다는 장점을, 그리고 과거 데이터부터 현재 데이터까지를 모두 커버함으로서 여러 상황에서의 주식 시장을 경험해볼 수 있음을 내세운다. | ||
+ | *장기적 관점에서 Social Deduction Game*적인 요소를 넣어 각 진영간의 경쟁을 유도할 수 있도록 유도하여 매 순간 플레이어가 다른 재미를 느낄 수 있도록 하여 리플레이성을 살려서 오래 롱런할 수 있는 게임으로 제작한다. | ||
+ | *플레이어가 다른 플레이어의 숨겨진 역할이나 팀 충성도를 알아내려고 시도하는 게임 | ||
===개발과제의 기대효과=== | ===개발과제의 기대효과=== | ||
====기술적 기대효과==== | ====기술적 기대효과==== | ||
− | + | *최대 12인의 사용자가 웹 브라우저에서 실시간으로 소통하며 다같이 한 게임을 즐길 수 있다. | |
+ | *실제와 유사한 주식 차트를 생성하고 사용자의 행동이 주식 차트 생성에 영향을 미친다. | ||
+ | |||
====경제적, 사회적 기대 및 파급효과==== | ====경제적, 사회적 기대 및 파급효과==== | ||
− | + | *게임이라는 오락 매체를 통해 MZ세대 사이의 사회적, 정서적 교류가 더 활발해진다. | |
+ | *주식에 관심이 생기기 시작한 MZ세대가 주식 거래 방식과 다양한 용어를 이해하고 주식과 시장경제에 대한 관심을 키운다. | ||
− | == | + | ==설계== |
− | === | + | ===개념설계안=== |
− | + | *StockCraft 게임 소개 | |
− | + | ::StockCraft는 웹 기반 실시간 주식 게임이다. 각 유저는 트레이딩을 통해 수익을 극대화하는 것을 목표로 하며, 각 사용자들은 게임의 시작 시 하나의 역할을 부여받으며 가상의 주식 시장에 참여한다. 역할은 개미, 기관, 세력으로 나뉜다. 각 플레이어는 게임이 진행되는 동안 다음 페이지를 통해 종목의 매수와 매도, 그리고 아이템을 사용할 수 있다. 사용자들은 각자의 역할에 맞게 본인의 고유 목표를 달성하기위해 매수, 매도, 아이템 등의 요소를 활용하며 게임에 참여한다. | |
− | + | [[파일:강한이김-개념설계안.png]] | |
+ | *StockCraft 게임 흐름 | ||
+ | ::사용자들은 웹 페이지에 접속한 후, 본인의 닉네임 등을 설정하는 사용자 설정단계를 거친다. 이후, 게임을 주최하는 Host와 참여하는 Guest는 참여 코드를 이용해서 고유의 방에 입장하여 게임을 시작한다. 게임이 시작되면 모든 참가자는 개미, 기관, 세력 중 하나의 역할을 부여받으며 게임이 시작된다. 게임은 낮-밤 및 주중-주말 등으로 이루어진 게임 내 시간에 따라서 차트 확인 및 매수•매도와 아이템 등을 사용하며 역할에 따른 목표를 수행한다. | ||
+ | [[파일:강한이김-게임흐름.png]] | ||
+ | *게임 플레이 페이지 | ||
+ | ::게임 중에는 참여자는 다음과 같은 View를 열람하게 된다. 뷰는 시간, 차트, 채팅, 아이템/매매, 내 정보로 나뉘게 된다. 상단의 시간 뷰에서는 게임 내 시간에 대한 정보를 제공해준다. 이는 낮과 밤 등 시간에 대한 정보 및 게임 내에서의 날짜 정보를 포함한다. 좌상단의 차트 뷰에서는 종목들과 주식에 대한 정보를 제공해준다. 차트 뷰를 통해서 각각의 사용자는 해당 종목의 주가 흐름 및 수익률 등을 확인할 수 있다. 우상단의 채팅 뷰에서는 게임에 참여하는 사용자들간의 소통 및 시스템 관리자에 의한 안내사항 등의 정보를 제공해준다. 좌하단의 아이템 및 매매 뷰 에서는 사용자들이 게임 내에서 다양한 시장 참여 행위를 직접적으로 할 수 있게 해준다. 마지막으로, 우하단의 내정보 뷰 에서는 게임이 진행되는 동안 사용자들이 본인의 현재 정보 및 게임 내 점수 등에 대한 정보를 열람할 수 있게 해준다. | ||
+ | [[파일:강한이김-게임시간플로우.png]] | ||
+ | *게임 시간 Flow | ||
+ | ::실시간 게임이다보니 게임의 타이밍별 수행해야하는 작업을 정의해야한다. 우리는 주말과 주중, 장중과 장외의 개념을 도입하여 각 타이밍별 해야 할 역할을 구분하도록 한다. 게임은 1주단위로 진행되며, 총 6일(1분 * 6) 주중과 주말로 나뉜다. 주말에는 아이템 사용을, 주중은 장중과 장외로 나뉜다. 장중에는 주식 종목을 매수, 매도할 수 있으며, 장외에는 주말처럼 아이템을 사용할 수 있다. | ||
− | ==설계== | + | ===소프트웨어 설계=== |
− | === | + | ====전체 아키텍처==== |
− | ==== | + | [[파일:강한이김-전체아키텍처.png]] |
− | + | *웹 클라이언트와 웹 서버는 웹소켓 기반 socket.IO 모듈을 통해 통신이 이루어지며, 웹 페이지 내에 서 발생하는 사용자의 동작 혹은 특정 시간 간격마다 시스템의 동작에 등록한 이벤트에 대하여 payload 를 담아 전송/수신한다. | |
− | ====설계 | + | *웹 서버와 ML 서버는 HTTP REST API 를 통해 통신이 이루어지며, 특정 시간 간격마다 주가 생성을 위해 웹 서버에서 요청 후 ML 서버에서 응답이 이루어진다. |
− | + | *웹 서버와 ML 서버는 몽고DB 에 접근하여 JSON 형식으로 데이터를 저장하며, 웹 서버는 클라이언트의 요청에 따라 데이터를 받아 저장하고, ML 서버는 주가를 생성 후 생성된 데이터를 저장한다. | |
+ | ====웹 프론트==== | ||
+ | [[파일:강한이김-웹프론트.png]] | ||
+ | *UI를 구성하는 component와 container를 분리하여, state가 업데이트 되면 container에서 받아와서 component에 props로 전달한다. | ||
+ | *Redux store를 통해 state 관리를 용이하게 한다. | ||
+ | *action이 발생하면 reducer를 통해 store의 state를 업데이트하고, container에서 이를 감지하여 update된 props를 component에 전달하여 뷰를 업데이트 하도록 한다. | ||
+ | ====웹 서버==== | ||
+ | [[파일:강한이김-웹서버.png]] | ||
+ | *서버 내부의 gateway 계층과 웹 클라이언트의 redux-saga 미들웨어 간 socket.IO 의 이벤트 기반 통신으로 서버와 클라이언트 간 통신이 이루어진다. | ||
+ | *gateway 계층은 service 계층을 주입받아 거래 처리, 아이템 사용 등 게임 내 비즈니스 로직을 처리한다. service 계층은 mongoDB 와 연결된 repository 계층과 상태를 관리하는 provider 계층을 각각 model 과 state 도메인 클래스를 이용하여 데이터를 조회/갱신한다. | ||
+ | *웹 서버에서 ML 서버에 주가 생성을 위해 요청할 때, API 클래스에 정의한 메서드를 호출하며 HTTP REST API 기반 POST/PUT/DELETE 요청이 이루어진다. | ||
+ | ====ML 서버==== | ||
+ | [[파일:강한이김-ML서버.png]] | ||
+ | *게임 시작 전, ModelSet을 만든다. 1995년부터 2021년 9월까지의 KOSPI 200 정보를 스크래핑한 후, 이 중 임의의 데이터를 뽑아 ModelSet으로 정의해둔다. | ||
+ | *POST/PUT/DELETE "/model" 요청이 들어오면, ML Server에서 지금까지의 데이터가 담긴 ModelSet에서 정보를 가져온 다음, ML Core로 정보를 보낸 후, 나온 결과를 MongoDB에 저장한 후, 수행 결과를 App Server에 반환한다. | ||
+ | ====ML 모델==== | ||
+ | [[파일:강한이김-ML모델.png]] | ||
+ | *ML 모델은 게임의 시작 이전에 현실 세계의 주식 시장 데이터와 LSTM-GAN 기반 모델을 이용해서 사전학습된 생성모델을 준비한다. | ||
+ | *실시간 추론은 사용자의 요청을 받으면 입력된 데이터에 기반해서, 후속으로 등장하게 될 정상 데이터의 범위 정보를 생성한 후 ML 서버에 출력한다. | ||
+ | |||
+ | ===사용자 요구사항=== | ||
+ | ====서비스 요구사항==== | ||
+ | [[파일:강한이김-서비스요구사항.png]] | ||
+ | |||
+ | ====게임성 요구사항==== | ||
+ | [[파일:강한이김-게임성요구사항.png]] | ||
+ | |||
+ | ===유스케이스=== | ||
+ | ====유스케이스 다이어그램==== | ||
+ | [[파일:강한이김-유스케이스다이어그램.png]] | ||
+ | |||
+ | |||
+ | ====유스케이스 시나리오==== | ||
+ | [[파일:강한이김-유스케이스시나리오1.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오2.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오3.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오4.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오5.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오6.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오7.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오8.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오9.png]] | ||
+ | [[파일:강한이김-유스케이스시나리오10.png]] | ||
+ | |||
+ | ===UI정의=== | ||
+ | ====UI Flow==== | ||
+ | [[파일:강한이김-UI플로우.png]] | ||
+ | |||
+ | ====화면 목록==== | ||
+ | [[파일:강한이김-화면목록.png]] | ||
+ | |||
+ | ====화면 흐름도==== | ||
+ | [[파일:강한이김-화면흐름도.png]] | ||
+ | |||
+ | ===데이터베이스 설계=== | ||
+ | ====컬렉션 설계==== | ||
+ | NoSQL 기반 mongoDB 에 다음과 같이 컬렉션을 구성하였다. | ||
+ | |||
+ | [[파일:강한이김-컬렉션설계.png]] | ||
+ | |||
+ | ====도큐먼트 설계==== | ||
+ | 각 컬렉션 내의 도큐먼트는 JSON형태로 구성되며, mongoDB 에서 데이터를 저장할 때의 자료구조 | ||
+ | 인 BSON (Binary JSON) 형태로 저장된다. 각 컬렉션의 좌측에는 변수명과 자료형, 우측에는 한글명칭을 의미한다. | ||
+ | |||
+ | *Games 게임 정보 (게임 내 종목, 방 코드) | ||
+ | [[파일:강한이김-games.png]] | ||
+ | |||
+ | *Items 게임 내 플레이어가 사용한 아이템 정보 | ||
+ | [[파일:강한이김-items.png]] | ||
+ | |||
+ | *Players 게임 내 플레이어 정보 | ||
+ | [[파일:강한이김-players.png]] | ||
+ | |||
+ | *Stocks 게임 내 생성되는 주가 정보 | ||
+ | [[파일:강한이김-stocks.png]] | ||
− | + | *Trades 게임 내 생성되는 거래 정보 | |
− | + | [[파일:강한이김-trades.png]] | |
− | + | *Market 게임 내 주가 생성에 관여하는 주가 정보 | |
− | + | [[파일:강한이김-market.png]] | |
− | + | *modelSet 게임 내 주가 생성에 관여하는 모델의 프리셋 정보 | |
− | + | [[파일:강한이김-modelSet.png]] | |
==결과 및 평가== | ==결과 및 평가== | ||
===완료 작품의 소개=== | ===완료 작품의 소개=== | ||
====프로토타입 사진 혹은 작동 장면==== | ====프로토타입 사진 혹은 작동 장면==== | ||
− | + | [[파일:강한이김-프로토타입1.png]] | |
− | ==== | + | |
− | + | [[파일:강한이김-프로토타입2.png]] | |
+ | |||
+ | [[파일:강한이김-프로토타입3.png]] | ||
+ | |||
+ | [[파일:강한이김-프로토타입4.png]] | ||
+ | |||
+ | [[파일:강한이김-프로토타입5.png]] | ||
+ | |||
+ | [[파일:강한이김-프로토타입6.png]] | ||
+ | |||
+ | ====평가 및 분석 결과==== | ||
+ | [[파일:강한이김-평가및분석결과1.png]] | ||
+ | |||
+ | ===프로젝트 접속 및 실행=== | ||
+ | [[파일:강한이김-프로젝트실행1.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행2.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행3.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행4.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행5.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행6.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행7.png]] | ||
+ | |||
+ | [[파일:강한이김-프로젝트실행8.png]] | ||
− | + | [[파일:강한이김-프로젝트실행9.png]] | |
− | |||
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | 내용 | + | [[파일:강한이김-완료작품의평가.png]] |
+ | |||
+ | ===향후 평가=== | ||
+ | ====어려웠던 내용들==== | ||
+ | |||
+ | * Web Client | ||
+ | ** 애플리케이션 전반에 걸친 TypeScript 기반 타입 지정 적용 | ||
+ | ** saga 함수 실행 및 component render 후 dispatch 함수 간의 타이밍 이슈 | ||
+ | ** 플레이어가 화면 focus out하면 카운트 다운이 지연되어 게임 내 시간 차가 생기는 이슈. | ||
+ | |||
+ | * Application Server | ||
+ | ** Socket.IO 이벤트 기반 클라이언트와 서버 간 통신 구현 | ||
+ | ** 서버 내부에서 일시적으로 데이터를 저장하기 위한 상태 관리 | ||
+ | ** 게임 내 특정 시각마다 모든 플레이어의 예약된 거래/아이템 처리를 위한 기능 구현 | ||
+ | |||
+ | * ML Server | ||
+ | ** 주가 데이터를 크롤링하고, 정제하는 과정에서 저장하는 데이터의 양식 통일에서 어려움을 겪었다. | ||
+ | ** 여러 게임이 진행되었을 때 핸들링 | ||
+ | ** 실제 게임에 사용되는 최종 데이터의 생성 과정에서 밸런스 조절의 어려움 | ||
+ | |||
+ | * ML | ||
+ | ** 정확성과 성능 사이의 적절한 균형점을 찾는 것이 쉽지 않았다. | ||
+ | ** 사용자의 인터랙션을 모델의 결과에 직간접적인 영향을 주는 방법을 고안하는 점이 어려웠다. | ||
+ | ** 예측의 결과로 값이 아닌 범위를 출력하기 위한 적절한 구조를 고민하는 것에 많은 시간을 썼다. | ||
+ | |||
+ | |||
+ | ====차후 구현할 내용==== | ||
+ | * Web Client | ||
+ | ** Mobile 에서의 브라우저 지원환경 (반응형 Web Application) | ||
+ | |||
+ | * Application Server | ||
+ | ** 사용자 회원가입/로그인 및 인증 (Authorization) | ||
+ | ** 도메인 클래스 기반 객체 지향 설계 | ||
+ | ** 데이터베이스 조회/갱신 줄이고 서버 내부의 상태로 유저 및 거래/아이템 데이터 저장 | ||
+ | |||
+ | * ML Server | ||
+ | ** Social Deduction Game 요소 추가 (게임 밸런스 측면) | ||
+ | ** 생성 데이터의 현실성과 게임성 사이의 밸런스 최적화 | ||
+ | ** Scale-out을 위한 설계로 리팩토링 | ||
+ | |||
+ | * ML | ||
+ | ** 적은 데이터 규모로 보다 정확한 예측을 진행하기 | ||
+ | ** 실시간 응답 구조에서 모델 저장 및 불러오기 과정의 최적화 | ||
+ | |||
+ | |||
+ | ==개발 사업비 정산== | ||
+ | ===구성원 및 추진체계=== | ||
+ | ====구성원==== | ||
+ | * 강** | ||
+ | ** Backend를 담당하여 어플리케이션 서버와 비즈니스 로직 구현 | ||
+ | ** Frontend 서포트 및 Backend 와 소켓 통신 구현 | ||
+ | |||
+ | * 한** | ||
+ | ** ML Model/Server 구현 및 시계열 데이터 생성 구현 | ||
+ | ** 생성 데이터를 어플리케이션 서버 전달 구현 | ||
+ | |||
+ | * 이** | ||
+ | ** Backend를 담당하여 어플리케이션 서버와 ML서버와의 통신을 구현 | ||
+ | ** Data를 담당하여 데이터 전처리 진행 | ||
+ | |||
+ | * 김** | ||
+ | ** Forntend를 담당하여 웹 어플리케이션의 전반적인 UI 구현 | ||
+ | |||
+ | ====추진체계==== | ||
+ | * Agile 방법론에 기반한 프로젝트 진행 | ||
+ | * 각 개발은 스프린트 단위(약 2주)로 정해진 기획 및 구현 목표를 설정한 후 일정에 맞춰 진행 | ||
+ | * 각 스프린트 기간동안, 본인의 작업사항 공유 및 작업 방향에 대해 논의하는 스크럼 진행 ◇ 스크럼 문서 관리는 Confluence, 개발 일정 관리는 Jira, 회의 진행은 Meet을 활용 | ||
+ | |||
− | === | + | ====작업 일정==== |
− | + | [[파일:강한이김-작업일정.png]] | |
− | === | + | ===개발사업비 내역서=== |
− | + | [[파일:강한이김-개발사업비내역서.png]] |
2021년 12월 19일 (일) 19:33 기준 최신판
프로젝트 개요
기술개발 과제
국문 : 스톡크래프트
영문 : StockCraft
과제 팀명
강한이김
지도교수
황혜수 교수님
개발기간
2021년 09월 ~ 2021년 12월 (총 4개월)
구성원 소개
서울시립대학교 통계학과 20185800** 강**(팀장)
서울시립대학교 컴퓨터과학부 20159200** 한**
서울시립대학교 컴퓨터과학부 20179200** 이**
서울시립대학교 컴퓨터과학부 20189200** 김**
서론
개발 과제의 개요
개발 과제 요약
- 웹 기반 실시간 멀티플레이 모의 투자 게임 제공
- 머신러닝 모델을 활용한 과거 주가 차트 기반 미래 주가 차트 생성
- 사용자의 아이템 혹은 스킬 사용과 랜덤으로 생성되는 기업 공시 등의 주가 변동 요소 추가
- 각 사용자마다 다른 역할 부여와 사용자 간 채팅 기능을 추가하여 게임 내 인터랙션 강화
개발 과제의 배경
- 주식 투자에 대한 흥미와 학습 유도
- 최근 한국을 포함해 세계 주요 증시가 오르면서, 학생들 사이에서도 주식 투자에 대한 관심이 늘고 있다. 하지만 대부분은 투자 경험도 적고 투자 관련 지식을 쌓기 위한 공부에 시간을 내기도 어렵다보니, 주식 투자에 어려움을 느끼고 쉽게 접근하지 못하거나, 기본적인 지식 없이 주변 지인의 추천이나 신뢰도가 낮은 정보에 의존해 투자하고 손실을 보는 경우도 있다. Stockcraft는 모의 주식 투자 기반 웹 게임으로, 게임 내에서 사용자가 아이템 혹은 스킬을 사용하여 흥미를 느낄 수 있는 시스템을 통해 투자에 대한 접근성을 높이고, 주식 거래 경험과 함께 기본적인 투자 상식을 얻을 수 있도록 유도하고자 한다.
- 기존 모의 투자 게임의 한계 돌파
- 기존의 모의 투자 게임은 과거 특정 종목 주가 차트를 기반으로 게임이 진행되는데, 사용자가 과거 차트를 암기하는 경우에는 미래의 흐름을 완벽하게 예측하고 비정상적으로 게임을 진행할 가능성이 있다. 이와 달리 Stockcraft는 과거 주가 차트를 기반으로 새로운 주가 차트를 생성하며, 사용자가 아이템 혹은 스킬을 사용하여 주가 차트에 변동을 줄 수 있는 요소를 넣어, 사용자에게 새로운 경험을 제공해고자 한다. 뿐만 아니라 주가 차트와 함께 기업 정보를 제공하기 힘든 기존 모의 투자 게임 환경과 달리, Stockcraft는 랜덤으로 생성되는 기업 공시 정보를 추가하여 사용자가 차트 뿐만 아니라 정보를 기반으로 투자를 진행하여 건전한 투자 습관을 가지도록 유도하고자 한다.
- 사용자 간 투자 실력 비교를 통한 흥미 유도
- Stockcraft 에서는 여러 명의 사용자가 10분 내외의 짧은 시간 동안 같은 주가 차트를 보고 실시간으로 게임을 진행하여 서로 간에 투자 실력을 비교한다. 또한 특정 사용자가 아이템 혹은 스킬을 사용하거나 특정 정보를 미리 획득할 수 있도록 구성하여, 사용자 간에 인터랙션을 가질 수 있도록 유도한다. 각 사용자마다 다른 주가 차트를 바탕으로 게임을 진행하거나, 여러 사용자가 단순히 같은 주가 차트를 보고 거래하는 기존 모의 투자 게임과 달리, 여러 사용자가 함께 새로운 게임을 만들어 가도록 하여 사용자의 흥미를 높이고자 한다.
개발 과제의 목표 및 내용
- 10분 내외의 시간 동안 게임을 진행하며, 랜덤으로 선택된 각 기업의 특정 시기 주가 차트를 기반으로 게임을 진행하는 동안 머신러닝 모델을 활용하여 주가 차트를 생성한다. 각 게임마다 모델의 예측력에 따라 다른 주가 차트가 생성된다.
개발 과제의 기술적 기대효과
- 최대 16인의 사용자가 웹 브라우저에서 실시간으로 소통하며 다같이 한 게임을 즐길 수 있다.
- 실제와 유사한 주식 차트를 생성하고, 사용자의 행동이 실시간으로 주식 차트 생성에 영향을 미친다.
개발과제의 경제적 및 사회적 파급효과
- 게임이라는 오락 매체를 통해 MZ세대 사이의 사회적, 정서적 교류가 더 활발해진다.
- 주식에 관심이 생기기 시작한 MZ세대가 주식 거래 방식과 다양한 용어를 이해하고 주식과 시장경제에 대한 관심을 키운다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- Web Socket
- TCP 연결에 완전 이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜. 웹소켓 프로토콜은 HTTP 폴링에 비해 더 낮은 부하를 사용하여 웹 브라우저과 웹 서버 간의 통신을 가능케 하며 서버와의 실시간 데이터 전송을 용이케 한다. 이는 클라이언트에 의해 요청을 받는 방식이 아니라 서버가 내용을 클라이언트에 보내는 표준화된 방식을 제공함으로써 또 연결이 유지된 상태에서 메시지들을 오갈 수 있게 허용함으로써 가능하게 되었다. 이러한 방식으로 클라이언트와 서버 간에 양방향 통신이 발생할 수 있다.
- Socket.io는 node.js 기반으로 만들어진 기술로, 거의 모든 웹 브라우저와 모바일 장치를 지원하는 실시간 웹 애플리케이션 지원 라이브러리이다. 이것은 100% 자바스크립트로 구현되어 있으며, 현존하는 대부분의 실시간 웹 기술들을 추상화했다. 다시 말해, Socket.io는 자바스크립트를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술이다.
- Time Series Analysis
- XGBoost 는 Gradient Boosting 알고리즘을 분산환경에서도 실행할 수 있도록 구현해놓은 라이브러리로, Regression, Classification 문제를 모두 지원하며 성능과 자원 효율이 높다. XGBoost는 여러 개의 Decision Tree를 조합해서 사용하는 Ensemble 알고리즘으로, 여러 개의 이진 노드를 겹쳐서 피쳐벌로 판단해 최종 값을 뽑아내는 형태가 된다.
- Ensemble 알고리즘은 여러 개의 모델을 조합해서 그 결과를 뽑아내는 기법으로, 정확도가 높은 강한 모델을 하나 사용하는 것보다, 정확도가 약한 모델을 여러 개 조합하는 방식이 정확도가 높다는 방법에 기인한다. Ensemble은 방식에 따라 Bagging과 Boosting으로 분류되는데, Bagging은 여러 모델을 사용할 때 각 모델에서 나온 값을 계산하여 최종 결과값을 내는 방식이고, Boosting은 모델에 샘플링된 데이터를 넣고 예측이 잘못된 값들에 가중치를 더해 다음 모델에 넣는 방식이다. 각 모델의 성능이 모두 다르기 때문에, 각 모델의 가중치 W를 반영하며, 여러 모델을 거쳐 최종적으로 나온 값의 오차를 줄이는 방식이다.
- ARIMA는 AR모형과 MA모형이 결합된 시계열 예측모형이다. AR 모형은 자기 회귀모형으로, Auto Correlation의 약자이다. 자기상관성을 시계열 모형으로 구성하였으며, 이전 자신의 관측값(이 이후 자신의 관측값에 영향을 준다는 아이디어에 기반하여 예측하고자 하는 특정 변수의 과거 관측값의 선형 결합으로 해당 변수의 미래값을 예측하는 모형이다. MA 모형은 Moving Average 모형으로, 예측 오차(ε)를 이용하여 미래를 예측하는 모형이다. ARIMA(p,d,q) 모형은 d차 차분한 데이터에 AR(p) 모형과 MA(q) 모형을 합친 모형으로 자기 회귀 및 이동 평균이 모두 적용된 미래를 예측하는 모형이다. y'은 d차 차분을 구한 시계열, p는 자기회귀 부분의 차수, d는 차분 회수, q는 이동평균 부분의 차수이다. 언급된 AR(p) 모형, MA(q) 모형, ARIMA(p, d, q) 모형의 식은 각각 아래와 같다.
- yt = c + ϕ1yt-1 + ϕ2yt-2 + ... + ϕpyt-p + εt ¨¨( 수식 1. AR 모형 )
- yt = c + θ1εt-1 + θ2εt-2 + ... + θpεt-p + εt ¨¨( 수식 2. MA 모형 )
- yt'= c + ϕ1yt'-1 + ϕ2yt'-2 + ... + ϕpyt'-p + θ1εt-1 + θ2εt-2 + ... + θpεt-p + εt ¨¨( 수식 3. ARIMA 모형 )
특허조사 및 특허 전략 분석
- 인터넷을 통한 주가등락 예측게임 시스템 및 게임방법. 정희선. 1020000015515(출원 번호). 2020.03.27 (출원일). 2001.02.05 (공개일)
- 인터넷을 통한 주가등락 예측게임 시스템 및 그 방법이 개시된다. 주가등락 예측게임 시스템은 인터넷을 통하여 주가등락 예측 게임 서버에 접속할 수 있는 회원용 클라이언트와 상기 회원용 단말기로부터 입력된 다수의 회원에 관한 정보를 저장하는 회원정보 데이터베이스와 회원들이 예측하고자 하는 주식에 관한 각종 정보를 저장하는 종목정보 데이터베이스와, 회원들이 입력한 각 종목에 대한 예측 정보를 저장하는 예측정보 데이터베이스와 각 회원들의 예측정보에 대한 결과를 저장하는 성적정보 데이터베이스와, 회원들이 예측할 대상종목을 선정하고 해당 종목에 대한 각종 정보를 상기 종목정보 데이터베이스에 입력하고, 회원들이 입력한 주가예측 정보를 실제 주식시장에서의 해당종목의 등락결과와 비교하며 비교된 결과에 따라 각 회원별 성적을 상기 성적정보 데이터베이스에 입력하는 제어부를 포함하여 구성되며, 각종 관련 데이터를 상기 클라이언트로 제공하는 서버로 이루어지는 것을 특징으로 한다.
- 인공 신경망 모형을 이용한 주가 등락 예측 시스템 및 주가 등락 예측 방법. 주식회사 코스콤. 1020130163585 (출원번호). 2013.12.26 (출원일). 2014.10.29 (등록일)
- 본 발명은 인공 신경망을 이용한 주가 등락 예측 시스템 및 주가 등락 방법을 개시한다. 본 발명에 따른 인공 신경망을 이용한 주가 등락 예측 시스템은 복수의 증시 관련 데이터를 입력 데이터로 입력받는 입력부, 입력된 복수의 증시 관련 데이터를 제1 복수 노드에 할당하고, 제1 복수 노드에 할당된 데이터별로 제1 가중치를 적용하여 제2 복수 노드에 할당함으로써 인공 신경망 모형을 모델링하는 모델링부, 제2 복수 노드에 할당된 데이터들에 제2 가중치를 적용하여 가중합을 연산한 뒤 활성화 함수에 입력하여 싱글값으로 산출하고, 싱글값을 기 정의된 임계값과 비교하여 싱글값이 임계값보다 크면 출력값으로 하이 값을 출력하고 싱글값이 임계값보다 작으면 출력값으로 로우 값을 출력하는 출력부를 포함한다.
- 주식 게임 시스템 및 이의 실행 방법. 김정웅. 1020140155537 (출원 번호). 2014.11.10 (출원일) .2016.01.06 (등록일)
- 본 발명의 일 실시예에 따른 주식 게임 시스템의 실행 방법은 주식 게임 서비스 제공 서버가 복수의 투자 종목 각각에 대해서 목표 수익률을 포함하는 도전 이벤트를 오픈하는 단계, 상기 주식 게임 서비스 제공 서버가 거래자에 의해 상기 복수의 투자 종목 중 특정 투자 종목에 대한 도전 이벤트가 선택되면 상기 도전 이벤트에 대한 도전을 개시하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 선택된 도전 이벤트에 대해서 해당 투자 종목의 실시간 수익률이 목표 수익률에 도달하는지 여부에 따라 승패를 결정하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 선택된 도전 이벤트에 대한 승률 정보를 집계하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 거래자에 의해 도전된 특정 투자 종목의 단일 이벤트 정보 및 상기 산출된 승률 정보를 사용자의 단말에 제공하는 단계, 상기 주식 게임 서비스 제공 서버가 상기 특정 투자 종목의 단일 이벤트 정보에 포함된 상승 또는 하락에 대한 투자 정보를 받아보는 것에 대한 구독 구매 신청을 받는 단계 및 상기 주식 게임 서비스 제공 서버가 상기 특정 투자 종목의 이벤트가 종료되면 상기 이벤트의 승패 정보를 구독 구매 신청한 사용자의 단말에 제공하는 단계를 포함한다.
- 미래 주식가격범위 결정 방법 및 그를 이용한 주가 예측 시스템. 1020200004212 (출원번호). 2020.01.13 (출원번호). 2020.08.04 (등록번호)
- 본 발명의 일 기술적 측면에 따른 주가 예측 시스템은, 주식정보를 수집하는 주식정보 수집부, 상기 주식정보에 대하여 텍스트 전처리를 수행하여 유효 주식정보를 생성하는 주식정보 전처리부, 상기 유효 주식정보로부터 대상 주식 및 상기 대상 주식에 대한 전망확률을 산출하는 전망확률 산출부 및 상기 대상 주식에 대한 상기 전망확률이 반영되는 요인으로서 정보반영 가속도를 산출하고, 상기 정보반영 가속도가 적용된 미래주가분포를 추정하여 상기 대상 주식의 미래 시점에 대한 추정 주가범위를 산출하는 정보반영 가중치 처리부를 포함한다. 본 발명의 일 실시형태에 따르면, 새로운 정보에 대한 지연 반영이나 정보 불균형 현상을 반영하여 미래 주식가격을 산출함으로써, 실제 주가의 변동 가능성을 보다 정확하게 예측할 수 있는 효과가 있다.
기술 로드맵
시장상황에 대한 분석
경쟁제품 조사 비교
- Stocker (주식)
- Ref : https://play.google.com/store/apps/details?id=com.mindknoll.stocker.client&hl=ko&gl=US
- Stock'er는 실제 데이터를 기반으로 게임머니를 이용해서 투자를 간접경험할 수 있는 서비스이다. 국내 주식(코스닥, 코스피)와 해외 주식(나스닥) 시장에 대한 모의투자를 진행할 수 있는 앱이다. 게임 플레이 가능한 시간이 장중 (평일 오전 9시 ~ 오후 5시 30분)으로, 실제 투자환경과 굉장히 유사한 것이 특징이자 장점이다, 그리고 실제 존재하는 여러 종목에 대해서 실제로 트레이딩을 하는 효과를 맛볼 수 있다. 하지만 현재 상황만을 반영한 게임 플레이가 강제되므로 리플레이성이 떨어진다.
- 증권사 모의투자 서비스 (주식)
- Ref : https://einfomax.securities.miraeasset.com/vts/#/main
- 모의투자 서비스는 실제 거래와 유사한 환경을 통해 투자의 경험 및 자신의 투자 매매기법을 점검해볼 수 있는 서비스이다. 각 증권사가 제공하는 HTS(Home Trading System: 컴퓨터에서 금융 투자 거래를 할 수 있게 하는 시스템), MTS(Mobile Trading System: 모바일에서 금융 투자 거래를 할 수 있게 하는 시스템) 위에서 진행할 수 있으며, 국내주식, 선물옵션, 해외주식, 해외선물 등 다양한 주식거래를 모의로 진행해볼 수 있다. 실제 HTS와 MTS를 기반으로 동작하므로 정말 유사한 User Interface를 가지고 있다는 장점이 있다. 하지만 이로 인해서 주식을 처음 접하는 사람들이 어떤 Action을 할 수 있으며, 이에 대한 Reward를 이해하는 것에 상대적으로 진입장벽이 발생할 수 있다.
- KRX 모의증권투자게임
- Ref : http://academy.krx.co.kr/contents/ACA/02/02010400/ACA02010400P1.jsp
- 한국거래소에서 제공하는 주식 게임으로, 턴제 게임의 형식을 지닌다. 각 라운드는 3번의 턴으로 이루어져있으며, 1턴마다 매수와 매도를 진행할 수 있다. 실제 거래소에서 운영하다보니 정보의 제공 등 서비스가 꽤 구체적이며. 게임적으로도 재미를 느낄 수 있을만큼 흥미를 잘 유도한다. 하지만 제작된지 오래된 게임이여서 UI가 오래되어보이며 상대적으로 최신 경향을 반영하지 못하고, 싱글 플레이 기반이다보니 여러 사람과 함께 플레이하는데 제약이 있다.
- 하나은행 X 넷마블 - 투자의 마블
- Ref : https://m.kebhana.com/cont/hidden/html/2021/giftGame.html
- 투자지식을 접목한 모노폴리 계열 게임으로 보드에 금융상품을 배열해 주사위를 굴려 투자 여부 및 투자 금액을 정하고 투자한 상품의 과거 2년 실제 데이터에 기반한 수익률에 따라 자산 증감을 경험해볼 수 있는 게임이다. 주식과 채권, ETF, 해외 주식 등 다양한 금융 용어를 접할 수 있다.
마케팅 전략 제시
- 기존의 모의투자와 투자 관련 캐주얼 게임 사이에서 게임성과 주식 관련 지식에 대한 이해를 도울 수 있는 교육적인 면모를 함께 강조한다.
- 10~15분의 상대적으로 짧은 플레이타임동안 주식의 한 사이클을 진행할 수 있다는 장점을, 그리고 과거 데이터부터 현재 데이터까지를 모두 커버함으로서 여러 상황에서의 주식 시장을 경험해볼 수 있음을 내세운다.
- 장기적 관점에서 Social Deduction Game*적인 요소를 넣어 각 진영간의 경쟁을 유도할 수 있도록 유도하여 매 순간 플레이어가 다른 재미를 느낄 수 있도록 하여 리플레이성을 살려서 오래 롱런할 수 있는 게임으로 제작한다.
- 플레이어가 다른 플레이어의 숨겨진 역할이나 팀 충성도를 알아내려고 시도하는 게임
개발과제의 기대효과
기술적 기대효과
- 최대 12인의 사용자가 웹 브라우저에서 실시간으로 소통하며 다같이 한 게임을 즐길 수 있다.
- 실제와 유사한 주식 차트를 생성하고 사용자의 행동이 주식 차트 생성에 영향을 미친다.
경제적, 사회적 기대 및 파급효과
- 게임이라는 오락 매체를 통해 MZ세대 사이의 사회적, 정서적 교류가 더 활발해진다.
- 주식에 관심이 생기기 시작한 MZ세대가 주식 거래 방식과 다양한 용어를 이해하고 주식과 시장경제에 대한 관심을 키운다.
설계
개념설계안
- StockCraft 게임 소개
- StockCraft는 웹 기반 실시간 주식 게임이다. 각 유저는 트레이딩을 통해 수익을 극대화하는 것을 목표로 하며, 각 사용자들은 게임의 시작 시 하나의 역할을 부여받으며 가상의 주식 시장에 참여한다. 역할은 개미, 기관, 세력으로 나뉜다. 각 플레이어는 게임이 진행되는 동안 다음 페이지를 통해 종목의 매수와 매도, 그리고 아이템을 사용할 수 있다. 사용자들은 각자의 역할에 맞게 본인의 고유 목표를 달성하기위해 매수, 매도, 아이템 등의 요소를 활용하며 게임에 참여한다.
- StockCraft 게임 흐름
- 사용자들은 웹 페이지에 접속한 후, 본인의 닉네임 등을 설정하는 사용자 설정단계를 거친다. 이후, 게임을 주최하는 Host와 참여하는 Guest는 참여 코드를 이용해서 고유의 방에 입장하여 게임을 시작한다. 게임이 시작되면 모든 참가자는 개미, 기관, 세력 중 하나의 역할을 부여받으며 게임이 시작된다. 게임은 낮-밤 및 주중-주말 등으로 이루어진 게임 내 시간에 따라서 차트 확인 및 매수•매도와 아이템 등을 사용하며 역할에 따른 목표를 수행한다.
- 게임 플레이 페이지
- 게임 중에는 참여자는 다음과 같은 View를 열람하게 된다. 뷰는 시간, 차트, 채팅, 아이템/매매, 내 정보로 나뉘게 된다. 상단의 시간 뷰에서는 게임 내 시간에 대한 정보를 제공해준다. 이는 낮과 밤 등 시간에 대한 정보 및 게임 내에서의 날짜 정보를 포함한다. 좌상단의 차트 뷰에서는 종목들과 주식에 대한 정보를 제공해준다. 차트 뷰를 통해서 각각의 사용자는 해당 종목의 주가 흐름 및 수익률 등을 확인할 수 있다. 우상단의 채팅 뷰에서는 게임에 참여하는 사용자들간의 소통 및 시스템 관리자에 의한 안내사항 등의 정보를 제공해준다. 좌하단의 아이템 및 매매 뷰 에서는 사용자들이 게임 내에서 다양한 시장 참여 행위를 직접적으로 할 수 있게 해준다. 마지막으로, 우하단의 내정보 뷰 에서는 게임이 진행되는 동안 사용자들이 본인의 현재 정보 및 게임 내 점수 등에 대한 정보를 열람할 수 있게 해준다.
- 게임 시간 Flow
- 실시간 게임이다보니 게임의 타이밍별 수행해야하는 작업을 정의해야한다. 우리는 주말과 주중, 장중과 장외의 개념을 도입하여 각 타이밍별 해야 할 역할을 구분하도록 한다. 게임은 1주단위로 진행되며, 총 6일(1분 * 6) 주중과 주말로 나뉜다. 주말에는 아이템 사용을, 주중은 장중과 장외로 나뉜다. 장중에는 주식 종목을 매수, 매도할 수 있으며, 장외에는 주말처럼 아이템을 사용할 수 있다.
소프트웨어 설계
전체 아키텍처
- 웹 클라이언트와 웹 서버는 웹소켓 기반 socket.IO 모듈을 통해 통신이 이루어지며, 웹 페이지 내에 서 발생하는 사용자의 동작 혹은 특정 시간 간격마다 시스템의 동작에 등록한 이벤트에 대하여 payload 를 담아 전송/수신한다.
- 웹 서버와 ML 서버는 HTTP REST API 를 통해 통신이 이루어지며, 특정 시간 간격마다 주가 생성을 위해 웹 서버에서 요청 후 ML 서버에서 응답이 이루어진다.
- 웹 서버와 ML 서버는 몽고DB 에 접근하여 JSON 형식으로 데이터를 저장하며, 웹 서버는 클라이언트의 요청에 따라 데이터를 받아 저장하고, ML 서버는 주가를 생성 후 생성된 데이터를 저장한다.
웹 프론트
- UI를 구성하는 component와 container를 분리하여, state가 업데이트 되면 container에서 받아와서 component에 props로 전달한다.
- Redux store를 통해 state 관리를 용이하게 한다.
- action이 발생하면 reducer를 통해 store의 state를 업데이트하고, container에서 이를 감지하여 update된 props를 component에 전달하여 뷰를 업데이트 하도록 한다.
웹 서버
- 서버 내부의 gateway 계층과 웹 클라이언트의 redux-saga 미들웨어 간 socket.IO 의 이벤트 기반 통신으로 서버와 클라이언트 간 통신이 이루어진다.
- gateway 계층은 service 계층을 주입받아 거래 처리, 아이템 사용 등 게임 내 비즈니스 로직을 처리한다. service 계층은 mongoDB 와 연결된 repository 계층과 상태를 관리하는 provider 계층을 각각 model 과 state 도메인 클래스를 이용하여 데이터를 조회/갱신한다.
- 웹 서버에서 ML 서버에 주가 생성을 위해 요청할 때, API 클래스에 정의한 메서드를 호출하며 HTTP REST API 기반 POST/PUT/DELETE 요청이 이루어진다.
ML 서버
- 게임 시작 전, ModelSet을 만든다. 1995년부터 2021년 9월까지의 KOSPI 200 정보를 스크래핑한 후, 이 중 임의의 데이터를 뽑아 ModelSet으로 정의해둔다.
- POST/PUT/DELETE "/model" 요청이 들어오면, ML Server에서 지금까지의 데이터가 담긴 ModelSet에서 정보를 가져온 다음, ML Core로 정보를 보낸 후, 나온 결과를 MongoDB에 저장한 후, 수행 결과를 App Server에 반환한다.
ML 모델
- ML 모델은 게임의 시작 이전에 현실 세계의 주식 시장 데이터와 LSTM-GAN 기반 모델을 이용해서 사전학습된 생성모델을 준비한다.
- 실시간 추론은 사용자의 요청을 받으면 입력된 데이터에 기반해서, 후속으로 등장하게 될 정상 데이터의 범위 정보를 생성한 후 ML 서버에 출력한다.
사용자 요구사항
서비스 요구사항
게임성 요구사항
유스케이스
유스케이스 다이어그램
유스케이스 시나리오
UI정의
UI Flow
화면 목록
화면 흐름도
데이터베이스 설계
컬렉션 설계
NoSQL 기반 mongoDB 에 다음과 같이 컬렉션을 구성하였다.
도큐먼트 설계
각 컬렉션 내의 도큐먼트는 JSON형태로 구성되며, mongoDB 에서 데이터를 저장할 때의 자료구조 인 BSON (Binary JSON) 형태로 저장된다. 각 컬렉션의 좌측에는 변수명과 자료형, 우측에는 한글명칭을 의미한다.
- Games 게임 정보 (게임 내 종목, 방 코드)
- Items 게임 내 플레이어가 사용한 아이템 정보
- Players 게임 내 플레이어 정보
- Stocks 게임 내 생성되는 주가 정보
- Trades 게임 내 생성되는 거래 정보
- Market 게임 내 주가 생성에 관여하는 주가 정보
- modelSet 게임 내 주가 생성에 관여하는 모델의 프리셋 정보
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
평가 및 분석 결과
프로젝트 접속 및 실행
완료작품의 평가
향후 평가
어려웠던 내용들
- Web Client
- 애플리케이션 전반에 걸친 TypeScript 기반 타입 지정 적용
- saga 함수 실행 및 component render 후 dispatch 함수 간의 타이밍 이슈
- 플레이어가 화면 focus out하면 카운트 다운이 지연되어 게임 내 시간 차가 생기는 이슈.
- Application Server
- Socket.IO 이벤트 기반 클라이언트와 서버 간 통신 구현
- 서버 내부에서 일시적으로 데이터를 저장하기 위한 상태 관리
- 게임 내 특정 시각마다 모든 플레이어의 예약된 거래/아이템 처리를 위한 기능 구현
- ML Server
- 주가 데이터를 크롤링하고, 정제하는 과정에서 저장하는 데이터의 양식 통일에서 어려움을 겪었다.
- 여러 게임이 진행되었을 때 핸들링
- 실제 게임에 사용되는 최종 데이터의 생성 과정에서 밸런스 조절의 어려움
- ML
- 정확성과 성능 사이의 적절한 균형점을 찾는 것이 쉽지 않았다.
- 사용자의 인터랙션을 모델의 결과에 직간접적인 영향을 주는 방법을 고안하는 점이 어려웠다.
- 예측의 결과로 값이 아닌 범위를 출력하기 위한 적절한 구조를 고민하는 것에 많은 시간을 썼다.
차후 구현할 내용
- Web Client
- Mobile 에서의 브라우저 지원환경 (반응형 Web Application)
- Application Server
- 사용자 회원가입/로그인 및 인증 (Authorization)
- 도메인 클래스 기반 객체 지향 설계
- 데이터베이스 조회/갱신 줄이고 서버 내부의 상태로 유저 및 거래/아이템 데이터 저장
- ML Server
- Social Deduction Game 요소 추가 (게임 밸런스 측면)
- 생성 데이터의 현실성과 게임성 사이의 밸런스 최적화
- Scale-out을 위한 설계로 리팩토링
- ML
- 적은 데이터 규모로 보다 정확한 예측을 진행하기
- 실시간 응답 구조에서 모델 저장 및 불러오기 과정의 최적화
개발 사업비 정산
구성원 및 추진체계
구성원
- 강**
- Backend를 담당하여 어플리케이션 서버와 비즈니스 로직 구현
- Frontend 서포트 및 Backend 와 소켓 통신 구현
- 한**
- ML Model/Server 구현 및 시계열 데이터 생성 구현
- 생성 데이터를 어플리케이션 서버 전달 구현
- 이**
- Backend를 담당하여 어플리케이션 서버와 ML서버와의 통신을 구현
- Data를 담당하여 데이터 전처리 진행
- 김**
- Forntend를 담당하여 웹 어플리케이션의 전반적인 UI 구현
추진체계
- Agile 방법론에 기반한 프로젝트 진행
- 각 개발은 스프린트 단위(약 2주)로 정해진 기획 및 구현 목표를 설정한 후 일정에 맞춰 진행
- 각 스프린트 기간동안, 본인의 작업사항 공유 및 작업 방향에 대해 논의하는 스크럼 진행 ◇ 스크럼 문서 관리는 Confluence, 개발 일정 관리는 Jira, 회의 진행은 Meet을 활용