"시장을 분석하는 것이 아니라, 나 자신을 분석한다."
Canary는 개인 주식 투자자의 매매 로그를 AI로 분석하여 비이성적 행동 패턴을 자동으로 탐지하고, 손실의 원인을 데이터 기반으로 설명하는 매매 행동 분석 및 맞춤형 투자 습관 점검 플랫폼입니다.
투자자의 실패 원인을 '정보 부족'이 아닌 '행동 통제 실패'에서 찾고, 객관적인 데이터 분석을 통해 투자자 스스로 자신의 매매 패턴을 인지할 수 있도록 도움으로써 실질적인 손실 방어와 건강한 투자 습관 형성을 지원합니다.
실시간 트레이딩 도구가 아닌, 정기 회고형 분석 플랫폼으로 포지셔닝하며, 최종 결과물은 React Native 기반 모바일 앱으로 제공됩니다.
-
정보의 문제가 아닌 행동의 문제: 국내 개인 투자자 수가 역대 최고치를 기록하고 있으나, 대다수가 명확한 기준 없이 FOMO, 패닉셀 등 비이성적 심리에 기반한 매매로 손실을 반복합니다.
-
기존 서비스의 한계: 대부분의 플랫폼은 무엇을 살 것인가(What to buy)에만 집중할 뿐, 정작 투자 실패의 핵심인 나는 왜 잃는가(Why I lose)에 대한 답을 주지 못합니다.
Canary는 수익 창출이 아닌, 손실을 유발하는 행동을 줄이는 데 집중합니다. 사용자의 매매 데이터 분석을 통해 무의식중에 반복되는 비이성적 패턴을 객관적으로 식별하여 손실 원인을 스스로 인지하고 투자 패턴을 개선할 수 있도록 지원합니다.
탐지 대상과 산식은 행동재무학 실증 연구를 따릅니다.
- 국내 실증: 자본시장연구원 이슈보고서 22-02 「국내 개인투자자의 행태적 편의와 거래행태」(개인투자자 20만 명 거래 분석 — 4축 체계와 지표 정의의 근거), 이슈보고서 21-11 「코로나19 국면의 개인투자자」
- 행태적 편의: 전망이론(Kahneman & Tversky 1979), 처분효과(Odean 1998), 과잉확신(Barber & Odean 2001), 복권형 주식 선호(Kumar 2009), 군집거래(Sias 2004)
- 산식: 시장수익률-거래회전율 반응(Statman et al. 2006), Fama-French 3요인 모형(1993, 고유변동성 추정), 사전적 고유왜도 EISKEW(Boyer et al. 2010)
무엇을 원문 그대로 따랐고 무엇을 근사로 타협했는지는 methodology.md에 정리했습니다.
자본시장연구원(KCMI) 실증 보고서가 다룬 개인 투자자의 행태적 편의 4가지를 성향 축으로 사용합니다.
| 축 | 이름 | 설명 |
|---|---|---|
| disposition_strength | 처분효과 | 이익 종목은 서둘러 팔고 손실 종목은 오래 보유하는 경향 |
| overconfidence | 과잉확신 | 시장이 오르면 자기 실력으로 여겨 거래를 늘리는 경향 |
| lottery_preference | 복권형 선호 | 변동성이 크고 가격이 낮은, 급등 이력이 있는 종목을 선호하는 경향 |
| herd_sensitivity | 군집거래 | 다른 투자자들이 몰리는 종목을 따라 사는 경향 |
- 자가진단: 20문항(축당 5문항, 1~5 리커트, 일부 역채점) 설문으로 축별 점수를 산출하고, 4축 조합으로 16가지 유형 코드를 만들어 표시합니다. 재검사 이력을 통해 성향 변화 추이도 확인할 수 있습니다.
- 매매 로그 기반 자동 갱신: 사용자가 매매 기록을 업로드하면, 실제 거래 데이터 기반 분석으로 성향이 갱신됩니다.
각 계층이 독립적으로 이상 여부를 판정하고, 경우에 따라 등급(정상/경고/이상)을 매깁니다.
- 1계층 (Rule-based): 규칙 템플릿 7종(일중 반복매매 N회, 당일 왕복매매, 최소 보유기간 X일, 손실 후 재진입 D일, 물타기 반복 M회, 1회 매수금액 상한, 일일 매매대금 상한)을 사용자가 온보딩·설정 화면에서 켜고 끄거나 횟수·일수·금액 파라미터를 직접 정하고, 위반 여부를 판정합니다. 수정 사항은 소급 적용 없이 다음 업로드 분석부터 반영됩니다.
- 2계층 (Statistical Anomaly): 사용자의 평소 매매 패턴을 기준으로 삼아, 새로 올라온 거래가 평소와 얼마나 다른지를 Mahalanobis 거리를 재어 이상 여부를 판정합니다.
- 3계층 (Deep Learning): GRU 시퀀스 모델이 거래마다 4개 KCMI 편향 각각의 귀속 확률을 예측하고, 그중 최댓값이 임계값을 넘으면 해당 거래를 이상으로 판정.
사용자의 매매 데이터가 학습 데이터 분포와 크게 다를 경우, 3계층 결과는 노출하지 않고 1·2계층 결과만 제공합니다.
Rule Score / Statistical Score / Deep Score를 각각 개별 노출합니다(내림차순 정렬).
3계층 탐지 이후, 사용자 본인의 매매 데이터를 근거로 분석 리포트를 제공합니다.
- 개인 행동 데이터: 3계층 판정 결과 + Integrated Gradients 기반 피처별 기여도(XAI)
- 투자 성향 프로파일: KCMI 4축 기반 자가진단·매매 로그 분석 결과와의 일치·이탈 분석
- 시장 외부 컨텍스트: 뉴스·공시 API를 통해 해당 거래 시점의 외부 이벤트를 참고 정보로 제공
- 코칭 리포트: 개발 중
어느 증권사의 거래내역 파일이든 그대로 올리면 자동으로 인식됩니다.
- JWT 기반 인증: 회원가입/로그인, 비밀번호 해싱, 사용자별 데이터 스코핑
- 이메일 인증: 회원가입 시 6자리 숫자 코드 방식으로 인증
- 비밀번호 재설정: 코드 기반 재설정 지원
- 소셜 로그인: 구글, 네이버 지원 (카카오는 비즈앱 심사 이슈로 제외)
- 약관 동의: 회원가입 시 약관 동의 여부 저장
- 레이트리밋: 주요 엔드포인트에 요청 횟수 제한 적용
- 시장 데이터: KRX Open API와 OpenDART 공시 API로 국내 전 종목의 시세·시가총액·상장주식수·종목 정보·지수·재무 데이터를 수집해 현실적인 시장 배경을 구성합니다.
- 합성 거래 데이터: 실제 시세 위에서 자본시장연구원 실증 보고서(이슈보고서 22-02, 이슈보고서 21-11)의 공표 통계를 재현하도록 캘리브레이션한 가상 투자자 행동 시뮬레이션으로 학습 데이터를 자체 제작합니다. 상세: synthetic_data.md
- CSV 자동 인식: 증권사마다 다른 파일 양식은 LLM이 컬럼·값 매핑표만 생성하고, 실제 데이터 변환은 결정론적인 코드가 수행합니다(숫자가 LLM을 거치지 않아 값이 변형될 수 없음).
- 비동기 처리: 업로드는 즉시 접수 응답을 반환하고, 매핑·저장·3계층 분석은 백그라운드 작업으로 수행됩니다. 서버 재시작 시 중단된 작업은 자동 정리됩니다.
| 분류 | 기술 |
|---|---|
| Frontend | React Native (Expo) |
| Backend | FastAPI, Python, PostgreSQL, SQLAlchemy, Alembic |
| AI / Data | PyTorch (GRU), Mesa (투자자 행동 시뮬레이션), scikit-learn, Gemini API |
| Data Source | KRX Open API, OpenDART |
| Infra | AWS EC2, AWS RDS (PostgreSQL) |
| CI/CD | GitHub Actions |
| Collaboration | GitHub, Notion |
cloud9/
├── frontend/ # React Native(Expo) 앱
│ └── src/ # screens(화면)·components·navigation·state·theme
│
├── backend/ # FastAPI 서버
│ ├── routers/ # API 엔드포인트 (auth, trades, jobs, analysis, survey, rules)
│ ├── models/ # 이상 탐지 (rule_based·zscore·layer3·xai)
│ ├── pipeline/ # 비동기 잡·CSV 매핑·탐지 파이프라인·분포 점검
│ ├── alembic/ # DB 마이그레이션
│ └── tests/ # 테스트 (CI에서 자동 실행)
│
├── ml/ # 3계층 모델 학습·실험·재현성 도구
├── synthetic_data/ # 합성 학습 데이터 생성기 (시뮬레이션·검증)
├── data/ # 데모용 샘플 거래내역
├── config/ # 서버 튜닝값 (settings.yaml)
└── doc/ # 기획 문서
cd backend
pip install -r requirements.txt
# .env 파일에 필요한 환경변수 설정 (DB 접속 정보 등)
uvicorn main:app --reloadSwagger UI: http://localhost:8000/docs
cd frontend
npm install
npx expo start- "무엇을 살까"가 아니라 "나는 왜 잃는가": 투자자 자신의 매매 행동을 규칙·다변량 통계·딥러닝으로 모델링해 손실의 행동적 원인을 설명합니다. 종목 추천 중심이거나 매매일지에 감정과 실수를 손으로 기록하던 방식을, 거래내역만 올리면 행동 패턴이 자동으로 측정되는 방식으로 대체합니다.
- 사회적 가치: 개인 투자자 비중이 급증하는 시대에, 데이터에 기반한 건강한 투자 습관을 형성하는 객관적인 분석 도구로서의 역할을 수행합니다.
| 이름 | 역할 | 담당 영역 |
|---|---|---|
| 최은우 | AI / 데이터 · 백엔드 | 3계층 탐지 엔진, 합성 데이터 생성기(시뮬레이션·KCMI 캘리브레이션·재현성), 모델 학습·배포(피처 엔지니어링 포함), 분석 파이프라인(CSV 매핑·분포 점검·시장 데이터 수집·비동기 처리), XAI, DB 스키마 설계 |
| 박나림 | 백엔드 | FastAPI 서버, 인증(JWT/소셜로그인), DB 스키마 설계, AWS 인프라, CI/CD |
| 임도경 | 프론트엔드 | React Native 앱 구현, 대시보드·리포트·성향진단 UI, 백엔드 연동 |
지도교수: 이민수 교수님
최종수정일 : 2026.09.01