메인 콘텐츠로 건너뛰기
Seoul Metro Line 2 · SeatScore v4 · Open Source

어느 칸에 타야
앉을 수 있을까?

서울 지하철 2호선의 10가지 공공데이터를 결합하여,
이동 중 착석 확률이 가장 높은 최적 탑승 칸을 추천합니다.

GitHub GitHub
316,800 혼잡도 데이터
10 데이터 소스
43 분석 대상 역
10 칸별 실시간 점수

기존 지하철 앱과 무엇이 다른가요?

X

기존 서비스

"빠른 하차"에 집중합니다.

  • 출구에서 가장 가까운 칸 안내
  • 환승 통로까지의 이동 시간 최소화
  • 내린 이후의 편의성만 최적화
M

Metropy

"착석 경험"에 집중합니다.

  • 이동 중 앉을 확률이 가장 높은 칸 추천
  • "빠른하차" 추천을 역이용한 탑승 경쟁 회피 전략
  • 경유역 하차 패턴 + 실시간 혼잡도 데이터 분석
"

출구까지 10분 단축하는 선택보다,
이동 중 5분이라도 앉아서 갈 수 있는 선택이 더 가치 있다.

당신의 착석 전략, 데이터로 검증합니다

빠른하차 추천 회피: 네이버 지도가 안내하는 "빠른하차" 위치를 피하면 탑승 경쟁이 줄어들까? 실제 데이터로 확인합니다.

출입문 위치 전략: x-2, x-3 위치에 서면 양쪽 일반석을 모두 노릴 수 있고, x-1, x-4는 줄이 짧아 빠르게 탑승 후 한쪽 일반석에 집중할 수 있습니다.

에스컬레이터 회피: 계단·에스컬레이터에서 먼 칸은 탑승 대기열이 짧아 착석 확률이 높아지는지, 실제 혼잡도 데이터로 계산합니다.

어떻게 작동하나요?

1

경로 입력

출발역과 도착역, 탑승 시간을 선택하세요. GPS로 현재 위치를 자동 감지할 수도 있습니다. 방향(내선/외선)은 자동 판별됩니다.

2

SeatScore 계산

혼잡도, 하차 패턴, 이동 거리, 시설 위치, 칸별 하차율 등 10가지 데이터를 결합하여 칸별 착석 효용 점수를 계산합니다.

3

최적 칸 추천

10량 열차의 모든 칸을 점수 순으로 랭킹하고, 기대 착석 시간까지 제시합니다. 가장 앉기 좋은 칸과 피해야 할 칸을 시각적으로 안내합니다.

SeatScore v4 공식

U(c) = Σs [ pfirst(c,s) × T(s→dest) ]
A(c,s) 비워지는 좌석 수
D(s) × w(c,s) × psit(s) × α(h)
C(c,s) 같은 칸 대기 인원
같은 칸에서 빈 자리를 노리는 서있는 승객
pcapture 빈 자리 차지 확률
1 − e−A/(ε+C)
pfirst 최초 착석 확률
pcapture × Π(1−pprev)
T(s→dest) 잔여 이동 시간
TMAP 대중교통 API 기반 (초 단위)
α(h) 시간대 배율 (자동 조정)
출근 1.4 / 퇴근 1.3 / 심야 0.6

핵심 통찰: 빈 자리를 잡을 확률은?

SeatScore v4는 각 경유역에서 빈 좌석이 생길 확률과 그 자리를 내가 차지할 확률을 역별로 계산합니다. 중간 칸(3~7호차)은 하차 승객이 많아 빈 좌석이 빨리 생기지만, 같은 칸 대기 인원도 많아 자리를 차지하기 어려울 수 있습니다. 이 트레이드오프를 수학 모델로 정밀하게 계산하고, 칸별 착석 확률(%)과 기대 착석 시간을 함께 제시합니다.

직접 확인해보세요

출발역과 도착역만 선택하면, 지금 바로 최적 탑승 칸을 확인할 수 있습니다.

GitHub GitHub

경로 입력

첫차 05:00 ~ 막차 24:30
08:00 출근 시간대
🚇 첫차 🌅 출근 ☀️ 점심 🌆 퇴근 🌙 심야 🛤️ 막차

2호선 노선도

역을 클릭하여 출발/도착역을 선택할 수 있습니다. 스크롤로 확대, 드래그로 이동

추천 파라미터 조정

추천 알고리즘의 주요 설정을 조정하여 나에게 맞는 추천 결과를 받을 수 있습니다. 평소 지하철 이용 습관에 맞게 설정해보세요.

혼잡 회피 강도

0.30
0.0 — 혼잡 신경 안 씀 1.0 — 최대한 한산한 칸

탑승할 때 사람이 많은 칸을 얼마나 피할지 결정합니다.

값이 낮으면 "도착까지 자리 날 확률"만 보고, 값이 높으면 "타는 순간 얼마나 편한지"도 중요하게 봅니다.

0.0 "타는 순간 혼잡해도 괜찮아" — 중간칸(4~6호차)이 추천되기 쉬움
0.3 "적당히 균형있게" — 기본 설정. 착석 기회와 탑승 편의 모두 고려
0.7+ "붐비는 칸은 싫어" — 양끝칸(1, 10호차)도 추천될 수 있음

출퇴근 시간대처럼 사람이 많을 때는 이 값을 높이면 좀 더 여유로운 칸을 추천받을 수 있습니다.

하차 분포 압축 강도 (γ)

0.50
0.1 — 강한 압축 (균등화) 1.0 — 압축 없음 (원본 분포)

칸별 탑승 경쟁 분포를 얼마나 균등하게 만들지 결정합니다.

값이 낮으면 혼잡한 칸과 한산한 칸의 차이가 줄어들어 "어디든 비슷하게" 계산됩니다. 값이 높으면 실제 혼잡도 차이를 그대로 반영합니다.

0.1~0.3 "칸별 차이를 크게 줄여서" — 극단적으로 붐비는 칸의 불이익 완화
0.5 "적당히 균형있게" — 기본 설정. 적당한 분포 압축
0.8~1.0 "실제 데이터 그대로" — 혼잡도 차이를 그대로 반영

기본값 0.5는 극단적인 혼잡 편차를 완화하면서도 칸별 차이를 유지합니다.

초기 착석 보너스 강도 (δ)

0.15
0.0 — 보너스 없음 0.5 — 강한 보너스

한산한 칸에 탑승할 때 바로 앉을 수 있는 추가 점수를 부여합니다.

탑승 시점에 이미 빈 좌석이 있을 확률이 높은 칸(양 끝 칸 등)에 보너스를 줍니다. 경유역 하차와 무관하게 "타자마자 앉을 수 있는" 편의를 반영합니다.

0.0 "즉시 착석은 무시" — 경유역 하차 패턴만 반영
0.15 "적당한 보너스" — 기본 설정. 한산한 칸에 약간의 가점
0.3+ "바로 앉는 게 중요" — 탑승 즉시 착석 가능성을 높게 평가

장거리 이동이면 0.1 이하, 단거리(2~3역)면 0.3 이상이 적절할 수 있습니다.

역 시설별 하차 가중치

역마다 출구로 나가는 시설(에스컬레이터, 계단 등)이 다릅니다.

사람들은 편한 시설 근처에서 많이 내리기 때문에, 그 근처 칸에 빈자리가 생길 가능성이 높습니다. 이 가중치로 각 시설이 하차에 미치는 영향력을 조절합니다.

편해서 많이 내림 → 빈자리 기대 높음
이용 인원 적음 → 착석에 영향 거의 없음
기준값 (보통 수준의 하차)

가중치가 높을수록 "이 시설 근처에서 사람이 많이 내린다"고 판단합니다.

시간대별 중요도 배율

시간대에 따라 "어느 칸을 타느냐"의 중요도가 달라집니다.

혼잡한 시간대에는 칸 선택이 중요하고(배율 높음), 한산한 심야에는 어디를 타도 앉을 수 있어 배율이 낮습니다. 시스템은 이 기준값들 사이를 부드럽게 연결하여 자연스러운 변화를 반영합니다.

가장 붐비는 시간 → 칸 선택이 중요
출근보다 약간 여유
보통 수준 (기준값)
퇴근 피크 이후 완만하게 낮아짐
한산해서 어디든 착석 가능
출근 전 낮은 혼잡도

1.0보다 크면 칸 선택 효과가 커지고, 1.0보다 작으면 어디를 타도 비슷해집니다.

혼잡 회피 강도별 추천 변화

혼잡 회피 강도를 0.0에서 1.0까지 변화시키며, 각 칸의 추천 순위가 어떻게 바뀌는지 시각화합니다. 먼저 추천 탭에서 경로를 선택한 뒤 분석을 실행하세요.

📊 내 사용 통계

🎯 추천받은 칸 분포

내가 가장 많이 추천받은 칸은 몇 호차일까요?

📈 시간대별 이용 패턴

어느 시간대에 Metropy를 가장 자주 사용했는지 확인하세요

🗺️ 자주 이용하는 경로 TOP 5

가장 많이 검색한 출발-도착 경로 순위

💬 피드백 통계

🔧 데이터 관리

Metropy 연구 배경

10가지 공공데이터를 결합한 지하철 착석 효용 극대화 의사결정 모델 (SeatScore v4)

1. 문제 정의

수도권 지하철 이용에서 이용자가 체감하는 핵심 불편 요소 중 하나는 "앉을 수 있는가"입니다. 그러나 대부분의 지하철 정보 서비스는 혼잡도, 빠른 하차, 환승 효율 등 이동 이후의 편의성에 초점을 맞추고 있으며, 이동 중 착석 경험 자체는 직접 고려하지 않습니다.

"같은 열차를 탄다는 전제하에,
어느 차량(칸)에 탑승해야 이동 중 착석 효용이 최대화되는가?"

이것은 상태(state)를 예측하는 문제가 아니라, 출발 시점에서의 선택을 비교하는 의사결정(decision) 문제입니다.

2. 예측이 아닌 의사결정

칸별 착석률이나 칸별 하차 인원에 대한 정답 데이터(ground truth)는 존재하지 않습니다. 따라서 전통적인 지도학습 예측 문제로 접근할 수 없습니다.

Metropy는 이를 점수 기반 의사결정 문제로 재정의합니다. 10가지 관측 가능한 공공데이터(혼잡도, 역 구조, 시설 위치, 칸별 하차율, 실제 이동시간 등)를 결합한 효용 함수 SeatScore v4를 설계하여 칸 간의 상대적 착석 효용을 비교합니다.

3. 데이터 소스 (10가지)

데이터출처규모
30분 단위 혼잡도 서울 열린데이터광장 2,264건
빠른환승 시설 정보 서울교통공사 API 450건
역간 거리 서울 열린데이터광장 52개 구간
실제 이동 시간 TMAP 대중교통 API 43개 구간
칸별 하차율 SK 지하철 혼잡도 API 195건
칸별 혼잡도 SK 지하철 혼잡도 API 248건
열차 혼잡도 SK 지하철 혼잡도 API 248건
역 하차 비율 혼잡도 데이터 가공 1,092건
시설/POI 가중치 빠른환승 데이터 가공 361건
출구 통행량 SK Exit Statistics API 287건

4. 왜 2호선인가?

빠른환승 API(getFstExit) 테스트 결과, 2호선이 450개 레코드, 43개 역, 10량 고정 편성으로 모든 노선 중 가장 풍부하고 일관된 데이터를 보유하고 있었습니다. 순환선 특성상 내선/외선 양방향 분석이 가능하며, 수도권 최다 이용 노선으로 실용성이 높습니다.

5. 주요 발견

3호차 10개 시나리오 중 5개에서 1위
4호차 10개 시나리오 중 3개에서 1위
1, 10호차 양 끝 칸은 일관되게 최하위

중간 칸(3~7호차)은 출구 시설이 집중되어 하차 승객이 많고, 자리가 빨리 비지만, 동시에 탑승 인원도 몰립니다. 이 트레이드오프가 SeatScore v4의 핵심 모델링 대상입니다.

6. 한계 및 주의사항

  • 의사결정 지원 도구이지 착석 여부의 예측이 아닙니다. 정답(ground truth) 기반 검증은 구조적으로 불가능합니다.
  • D(s)는 30분 단위 역 전체 평균 혼잡도 기반이며, 실시간 차량 내 인원과는 차이가 있을 수 있습니다.
  • w(c,s)는 SK API 칸별 하차율 + 시설 위치 기반이며, 승객 개인 행동까지 반영하지는 않습니다.
  • β=0.3, γ=0.5, δ=0.15, α 기준값은 휴리스틱 설정이며, 파라미터 탭에서 β/γ/δ 민감도 분석으로 직접 검증할 수 있습니다.
  • 점수는 칸 간의 상대적 효용 비교이지, 절대적 착석 확률(%)을 의미하지 않습니다.

7. 개발 과정

Phase 1: 문제 발견과 데이터 탐색

서울교통공사 혼잡도 데이터와 빠른환승 API를 탐색하며, 2호선이 가장 풍부한 데이터를 가진 노선임을 확인. 10량 고정 편성, 순환선 구조가 분석에 최적.

Phase 2: SeatScore 모델 설계

예측이 아닌 의사결정 프레임으로 전환. 하차량, 잔여시간, 칸별 가중치, 시간대 배율, 탑승 경쟁도, 혼잡 감점 6개 요소를 결합한 효용 함수 설계.

Phase 3: 실시간 데이터 수집

SK 지하철 혼잡도 API(칸별 하차율, 칸별 혼잡도)와 TMAP 대중교통 API(실제 이동시간)를 연동. 일일 100건씩 데이터를 축적하며 모델 정밀도 향상.

Phase 4: 웹 앱 & 시각화

FastAPI 백엔드와 반응형 프론트엔드 구축. 열차 시각화, 착석 기회/혼잡 감점 차트, 칸별 추천 이유 설명, 인터랙티브 노선도, PWA 지원까지 완성.

8. Contact