[강동7기 전Z전능 AI PM] 코멘토 청년취업사관학교 DAY 38 ~ 41

DAY 38 ~ 41 | 서울 지하철, 한 명 태울 때마다 781원 손실 — 원인을 SQL로 파헤치다

8/20(목)부터 8/25(화)까지 나흘간 “데이터 분석 프로젝트” 수업이 진행됐다. 팀명은 “자리찜”. 문제 정의부터 가설 수립, SQL 검증, 인사이트 도출, 액션 제안까지 데이터 분석의 전체 사이클을 팀 단위로 한 바퀴 돌리고, 마지막 날 발표까지 마치는 일정이었다. 하루하루를 나눠 쓰기보다, 프로젝트가 실제로 흘러간 순서 그대로 하나의 글로 정리한다.


왜 이 문제를 골랐나 — 보도자료 한 장에서 시작한 질문

첫날인 8/20 목요일은 데이터셋을 고르고 문제 후보를 발굴하는 데 썼다. 팀이 최종적으로 고른 건 서울교통공사가 2026-06-12에 배포한 보도자료였다. 제목부터 자극적이었다.

“서울 지하철, 한 명 태울 때마다 781원 손실 … 무임수송 등 원인”

내용을 뜯어보면 이렇다. 2025년 승객 1명을 수송하는 데 든 원가는 1,817원인데 실제로 받은 평균 운임은 1,036원이라, 태울 때마다 781원씩 손실이 난다. 원가보전율(운임/원가)은 57%. 이 수치는 최근 5년간 단 한 번도 50%대를 벗어나지 못했다. 보도자료 발표 당일 파이낸셜뉴스·연합뉴스·TBS 세 매체가 동시에 이 숫자를 다뤘지만, “왜 매년 손실이 커지는지”에 대한 구조적인 설명은 어디에도 없었다. 숫자는 있는데 원인 분해가 빠져 있는 자료 — 이 지점이 팀이 파고들 틈이었다.

그래서 질문을 이렇게 세웠다.

서울 지하철, 한 명 태울 때마다 손실 — 원인이 무엇인가?

이 분석이 누구의 어떤 의사결정을 돕는지도 먼저 정했다. 서울교통공사·서울시 정책 담당자가 (1) 정부·지자체에 무임수송 손실 지원을 요청할 근거 수치를 정리하고, (2) 요금 조정·비용 구조 개선의 우선순위를 정하는 데 참고할 근거를 만드는 것을 목표로 잡았다.


문제를 세 갈래로 쪼개기

수업에서 강조한 가설 수립 방법은 “왜 그럴까?”를 스스로 세 번 물어보고, 떠오르는 이유를 최소 3개 적은 뒤 가진 데이터로 확인 가능한지 체크하는 순서였다. 이 순서를 따라 최종 확정한 가설은 세 개다.

  1. 수익보다 1인당 운영비가 더 클 것이다. (원가 구조)
  2. 무임승차 비율이 늘어날수록, 운임 수익을 내는 승객 비중이 줄어서 적자가 커질 것이다. (무임승차)
  3. 유지보수비·이자비용(차입금) 같은 고정비가 매년 늘어서 적자를 키울 것이다. (고정비)

가설 3은 원래 “시설 노후화로 인한 유지보수비·이자비용 증가”였는데, 8/21에 문구를 한 번 수정했다. 접속 가능한 class DB 19개 스키마 전체를 뒤져봤지만 시설 설치연도나 노후도를 직접 측정할 데이터가 없었기 때문이다(승강기 가동현황도 시계열이 아니라 단일 스냅샷이었다). 그래서 “시설 노후화로 인한”이라는 원인 설명은 빼고, 유지보수비·이자비용이라는 결과 지표 자체의 추이만 검증하는 것으로 범위를 좁혔다. 문제 정의는 데이터를 만나면서 계속 재검토해야 한다는 걸, 첫 가설 조정에서부터 확인한 셈이다.


데이터 원천 파악과 한계 — 검증 전에 먼저 인정한 것들

가설을 세운 다음 곧바로 SQL을 짜지 않고, 사용할 데이터의 범위와 한계부터 정리했다. 이 부분이 이후 전체 검증 과정의 기준이 됐다.

주로 쓴 스키마는 두 개다.

  • seoul_metro_finance — 연간 영업수익/영업비용/당기순이익(annual_performance), 총괄원가(total_cost, 단 수익계 컬럼은 전 연도 0), 요금현실화율(fare_realization_rate), 손익계산서 세부계정(income_statement, 2024-11·2025-11 2개 시점만), 재무상태표(balance_sheet, 2025-12·2026-03 2개 시점만).
  • seoul_subway_v2 — 월별 유임/무임 승하차 인원(ridership_fare, 2015.01~2026.07), 역·호선 마스터(station), 2025년 계정별 시산표(trial_balance_2025).

여기에 더해 팀에서 서울교통공사 공식 재무제표를 직접 확보해 2021~2025 5개년 합계잔액시산표를 통합 CSV로 만들고, 로컬 MySQL(trial_balance_2021_2025)에 적재했다. 팀원 한 명은 별도로 2017~2025년 9개년 재무제표를 엑셀에서 직접 집계해 독립적인 교차검증 자료를 만들었다.

한계는 처음부터 분명히 짚어뒀다.

  • 재무 데이터는 2021~2025 5개년뿐이고, 승하차 데이터(2015~2026)와 겹치는 구간도 이 5개년뿐이라 상관관계 분석은 포인트가 5개밖에 안 된다. 참고 수준으로만 해석하기로 했다.
  • income_statement/balance_sheet는 세부 계정까지 보여주지만 시점이 1~2개뿐이라 “매년 증가” 같은 연도별 트렌드는 이 테이블로는 말할 수 없다.
  • 무임승차로 인한 원화 손실액은 데이터에 직접 없어서 무임승차인원에 평균요금을 곱한 추정치를 써야 한다.
  • 9호선은 운영 주체가 두 곳(서울교통공사/9호선운영주식회사)으로 나뉘어 있어 평균운임 계산에 일부 오차 가능성이 있다.
  • 기후동행카드 손실은 재무제표에 별도 계정으로 잡히지 않아 이번 분석에서는 분리해낼 수 없었다.

한계를 먼저 정리하고 나니, 이후 결과를 발표할 때도 “이 수치는 어디까지 신뢰할 수 있는가”를 스스로 판단할 수 있는 근거가 생겼다.


방법론 교차검증 — 보도자료 수치와 맞아떨어질 때까지

8/21 금요일은 가설별 검증 SQL을 작성하고 1차 EDA를 돌리는 데 썼다. 가장 먼저 손댄 건 가설 1이었다. 2025년 총괄원가(인건비+경비+자본비용)를 승차인원으로 나눠 수송원가를 구하고, 운수사업수익을 승차인원으로 나눠 평균운임을 구하면 됐다. 그런데 첫 버전으로 돌린 결과는 보도자료 수치(781원/57%)와 꽤 벌어졌다.

원인을 찾아보니 두 가지였다. 하나는 총괄원가에 ‘수탁대행사업원가’(2,349억)를 그대로 포함시킨 것이었다. 이건 서울시 위탁사업(7호선 연장구간, 9호선 2-3단계, 잠실광역환승센터) 비용이라 수탁/대행사업수익 2,349억과 대응되는 항목이지, 지하철 수송원가가 아니었다. 다른 하나는 영업외비용 전체를 자본비용에 넣은 것이었다. 자산처분손실·기부금 같은 일회성 항목까지 수송원가에 들어가면 안 됐다. 이자비용만 남기고 나머지는 뺐다.

WITH cost AS (
    SELECT
        SUM(CASE WHEN account_name IN ('급여', '성과급', '퇴직급여', '복리후생비')
                 THEN net_balance ELSE 0 END) AS 인건비,
        SUM(CASE WHEN account_name IN ('감가상각비', '무형자산상각비', '이자비용')
                 THEN net_balance ELSE 0 END) AS 자본비용,
        SUM(CASE WHEN account_name NOT IN ('급여', '성과급', '퇴직급여', '복리후생비',
                                            '감가상각비', '무형자산상각비', '이자비용')
                 THEN net_balance ELSE 0 END) AS 경비,
        SUM(net_balance) AS 총괄원가
    FROM seoul_subway_v2.trial_balance_2025
    WHERE note = '비용'
      AND (   순번 BETWEEN 149 AND 175   -- 운수사업원가
           OR 순번 BETWEEN 199 AND 225   -- 판매비와관리비
           OR 순번 = 237 )               -- 이자비용
      -- 수탁대행사업원가(176~198)는 의도적으로 제외
)
-- 이하 revenue, ridership CTE와 조인해 수송원가 / 평균운임 / 승차당손익 / 원가보전율 산출

이렇게 보정한 뒤 1~8호선 기준으로 다시 돌리니 수송원가 1,828원, 평균운임 1,033원, 승차당손익 -795원, 원가보전율 56.5%가 나왔다. 보도자료 공식 수치(1,817원/1,036원/-781원/57%)와 근접한 값이라, 산정 로직 자체가 검증됐다고 판단했다. 나중에 팀원이 별도로 정리한 2017~2025 9개년 원본 재무제표로도 같은 방식(수탁대행사업원가 제외)으로 재구성해봤는데, 여기서는 -785원, 0.6% 차이로 더 좁혀졌다. 서로 다른 두 경로(class DB 시산표 vs 엑셀 원본 재무제표)로 각각 계산했는데 둘 다 공식 수치에 근접했다는 게, 이후 가설 검증 전체를 신뢰하고 진행할 수 있는 근거가 됐다.


가설 1 — 원가 구조 자체가 만성 적자, 그리고 아직 2019년만큼도 못 돌아온 회복

가설 1은 사실상 위 검증 과정에서 이미 답이 나와 있었다. 2025년 원가보전율 56.5%(팀원 재구성 기준 56.2%)는 “승객이 늘어도 태울 때마다 구조적으로 손실이 나는” 구조라는 뜻이다. 인건비(1조 5,089억)만으로도 운수사업수익(1조 6,659억)의 90%를 넘고, 자본비용(5,673억)까지 더하면 운임만으로는 원가를 채울 수 없는 구조라는 게 숫자로 확인됐다.

팀원이 정리한 9개년 데이터를 보면 이 구조가 최근 몇 년 얘기가 아니라는 게 더 뚜렷해진다.

연도수송원가평균운임승차당손익운임회수율
20191,434원915원-520원63.8%
20202,027원918원-1,109원45.3%
20211,940원957원-982원49.4%
20221,889원990원-899원52.4%
20231,743원935원-808원53.6%
20241,830원970원-860원53.0%
20251,792원1,007원-785원56.2%

코로나 직전인 2019년 원가보전율(63.8%)이 가장 높았고, 2020년 코로나로 45.3%까지 급락한 뒤 5년째 회복 중인데도 2025년(56.2%)이 여전히 2019년보다 나쁘다. 이유는 승객 회복 속도와 원가 상승 속도가 어긋났기 때문이다. 승객은 2019년 17.90억명에서 2025년 16.54억명으로 92%까지 돌아왔는데, 총괄원가는 같은 기간 25,672억 → 29,648억으로 오히려 15% 늘었다. 승객이 돌아오기 전에 원가가 먼저 새로운 수준에 자리를 잡아버린 셈이라, 승객 회복만으로는 원가보전율이 2019년 수준으로 돌아가지 않는다.


가설 2 — 무임승차는 매년 늘지만, 전체 적자와 1:1로 움직이진 않는다

무임승차비율을 2015~2025년으로 계산해보니 재무 데이터가 겹치는 2021~2025 구간에서 16.00%(2021) → 17.55%(2025)로 5개년 연속 증가했다. 무임승차 추정손실액(무임승차인원 × 그해 평균요금)도 2,094억 → 3,008억으로 5년간 약 44% 늘었다.

SELECT
    ry.연도,
    ry.무임승차비율_pct,
    fy.영업비용 - fy.영업수익 AS 수익비용격차,
    ry.무임승차인원 * fr.평균요금_원 AS 무임승차_추정손실액
FROM ridership_yearly ry
LEFT JOIN finance_yearly fy ON ry.연도 = fy.연도
LEFT JOIN fare fr ON ry.연도 = fr.연도
WHERE ry.연도 BETWEEN 2021 AND 2025
ORDER BY ry.연도;

다만 “무임승차비율이 늘면 전체 적자가 커진다”는 가설의 뒷부분은 그대로 성립하지 않았다. 무임승차비율과 영업수익-영업비용 격차의 상관계수를 계산해보니 -0.486으로, 방향은 맞지만 1:1로 움직이는 관계는 아니었다. 실제로 2023년과 2025년에는 전체 적자 규모가 오히려 축소됐는데, 같은 기간 수익 자체도 함께 늘었기 때문이다. 무임승차손실이 당기순손실에서 차지하는 비중을 따로 보면 2023년엔 49.5%까지 올라가는 해도 있었지만, 매년 정확히 비례해서 움직이지는 않았다. “매년 늘어난다”는 절반은 맞고, “그래서 적자가 커진다”는 단정하기 어렵다는 게 정직한 결론이었다.

참고로 이 자료를 정리하면서 기후동행카드(정기권 확장) 손실도 함께 찾아봤는데, 우리가 가진 원본 재무제표는 “운수사업수익”을 단일 계정으로만 집계해 정기권·기후동행카드 손실을 별도로 분리할 수 없었다. 외부 보도(MTN, 2026-01-06)를 보면 2024년 1월 도입된 기후동행카드 손실은 2024년(2~12월) 1,527억 원에서 2025년(추정) 약 3,095억 원으로 1년 새 약 2배로 늘었고, 서울시·공사가 절반씩 부담하는 구조에서 공사의 실부담액도 34~61% 늘어 같은 기간 무임승차손실 증가율(+8.5%)보다 훨씬 가파르다. 다만 기후동행카드는 정부 “모두의 카드” 출범으로 2026년 9월 종료가 확정된 정책이라, 이 손실 요인은 앞으로는 소멸된다는 점도 같이 적어뒀다.


가설 3 — 이자비용은 매년 늘지만, 원인은 “차입금”이 아니라 “사채”였다

세 가설 중 검증 과정이 가장 길었던 건 가설 3이다. 8/24 월요일에 이 가설을 마무리하고 인사이트·액션 제안까지 정리해야 했다.

먼저 이자비용 5개년 추이를 봤다.

SELECT
    year,
    net_balance AS interest_expense,
    ROUND(net_balance / 1e8, 1) AS interest_expense_억,
    ROUND(
        (net_balance - LAG(net_balance) OVER (ORDER BY year))
        / LAG(net_balance) OVER (ORDER BY year) * 100, 1
    ) AS yoy_pct
FROM trial_balance_2021_2025
WHERE account_name = '이자비용'
ORDER BY year;

결과는 594억(21) → 848억(22, +42.7%) → 1,054억(23, +24.4%) → 1,306억(24, +23.9%) → 1,426억(25, +9.2%). 5개년 예외 없이 매년 증가했고, 4년 누적으로는 +140%(2.4배)다. 증가율 자체는 매년 둔화되고 있지만(42.7%→9.2%) 방향은 한 번도 꺾이지 않았다.

그다음이 이번 프로젝트에서 제일 흥미로웠던 발견이다. 가설 원문은 “이자비용(차입금)“이라고 콕 집어 썼는데, 이자 발생 부채(사채/장기차입금/단기차입금) 잔액을 각각 추적해보니 실제로 매년 늘어난 건 차입금이 아니라 사채였다.

SELECT
    year, account_name,
    ABS(net_balance) AS balance_amount,
    ROUND(ABS(net_balance) / 1e8, 1) AS balance_억
FROM trial_balance_2021_2025
WHERE account_name IN ('사채', '장기차입금', '단기차입금')
ORDER BY account_name, year;

사채는 2,638억(21) → 2,878억 → 3,368억 → 3,395억 → 3,565억(25)으로 5개년 예외 없이 매년 증가(누적 +35.2%)해, 이자비용 증가의 실질적 배경이었다. 반면 장기차입금은 2023년에 1,500억으로 처음 등장한 뒤 2023~2025 세 해 연속 원 단위까지 완전히 동일한 금액이었다. 추가 차입도 상환도 없었다는 뜻이라, “매년 증가”의 근거가 될 수 없다. 단기차입금은 5개년 내내 0이었다. 가설 원문의 “이자비용(차입금)“은 부정확한 표현이고, 정확히는 “이자비용(사채)“이라는 게 이번 검증의 결론이다.

유지보수비(수선유지비+차량유지비)는 가설과 다른 방향으로 나왔다. 가설은 “매년 늘어난다”였는데, 실제로는 382억(21) → 408억(22, +6.8%) → 833억(23, +103.9%) → 562억(24, -32.5%) → 496억(25, -11.9%)으로, 2023년에 두 배 넘게 뛰었다가 2년 연속 줄어드는 스파이크형 패턴이었다. 이 스파이크는 데이터 이상치가 아니라 공사 자체 결산 공시(“전년 대비 주요 증감원인”)에서도 확인됐다. 2023년 인건비가 14,841억에서 13,966억으로 875억 줄어드는 동안 그 반대편에서 수선유지비가 크게 늘어난 구조였다. 다만 구체적으로 어떤 보수 사업 때문인지까지는 공시에 나오지 않아, 근본 원인은 이번 분석에서 확정하지 못했다.

이자비용과 유지보수비를 합친 고정비가 영업비용에서 차지하는 비중은 3.96%→4.79%→7.19%→6.59%→6.85%로 2023년까지 오른 뒤 6%대 후반에서 유지됐다. 당기순손실 대비로는 10.1%→19.6%→36.5%(23)→25.8%→23.2%로 훨씬 크게 움직여, 고정비만으로 당기순손실의 최대 36%(2023년)까지 설명됐다.


종합 결론 — 손실은 단일 원인이 아니라 세 겹으로 쌓인 구조

세 가설을 합쳐보면 이렇다. 가장 크고 확실한 원인은 가설 1, 즉 원가-운임 구조 자체다. 운임만으로는 원가의 56.5%밖에 회수하지 못하는 구조라, 승객이 늘어도 태울 때마다 구조적으로 손실이 남는다. 여기에 무임승차 비율이 5년 내내 매년 증가(가설 2)해 운임 수익을 내는 승객 비중이 줄고, 사채 확대로 이자비용이 5년 내내 매년 증가(가설 3)해 고정비 부담이 커지는 두 가지가 매년 손실을 더 키우는 방향으로 겹친다. 승차인원은 2019년 대비 92%까지 회복했지만, 당기순손실은 2023년을 저점으로 2024·2025년 다시 커졌다. 승객이 돌아와도 손실이 다시 커지는 이유는 이 복합 구조에 있다.


액션 제안

발표에서 정리한 액션은 네 가지다.

  1. 무임수송 손실 정부 지원 요청 근거 강화 — 무임승차 비율이 5년 연속 증가한 추세선을 정부·지자체 지원 협의 자료에 반영한다.
  2. 사채 의존도 모니터링 체계화 — 이자비용 증가의 핵심 원인이 사채로 확인된 만큼, 신규 사채 발행을 억제하고 별도의 상환 계획을 수립한다. 노후 전동차 교체 등 대규모 투자사업(2025~2029년 연 7천억대)의 재원 조달 시 사채 비중을 별도로 추적할 필요가 있다.
  3. 원가보전율을 정기 추적 대시보드로 — 가설 1 검증 쿼리가 보도자료 공식 수치와 근접하게 재현되므로, 이 쿼리를 매년 재실행해 원가보전율 추이를 자체적으로 모니터링할 수 있다.
  4. 해외 조건부 무임승차 제도 벤치마킹 — 영국·뉴욕·파리·독일처럼 무임승차를 조건부로 운영하는 해외 사례를 검토해 지속가능한 제도 설계 방향을 참고한다.

지금 이 액션들이 필요한 이유도 숫자로 짚었다. 누적 결손금이 이미 19조 7,490억 원에 달하고, 부채비율은 149%로 행정안전부의 지방공사채 발행 승인 기준(130%)을 넘어섰다. 사채 잔액도 3조 5,650억 원까지 5년 연속 늘었고, 무임수송손실도 5년간 70% 증가했다. 부채비율이 법정 승인 기준을 넘었다는 건, 더 이상 대응을 미룰 수 없는 단계라는 뜻이다.


발표 당일 — AI가 산출한 숫자를 그대로 믿을 뻔한 순간

8/25 화요일은 발표자료를 완성하고 리허설을 거쳐 팀별로 발표하는 날이었다. 16장짜리 슬라이드를 Tableau 스타일로 완성해 발표까지 마쳤다.

준비 과정에서 어려웠던 점은 크게 세 가지였다. 재무 데이터, 승하차 데이터, 팀원이 따로 정리한 엑셀 자료까지 여러 곳에 흩어져 있어 수집과 정리에 시간이 상당히 들었다. 재무제표의 회계 용어가 생소해 어떤 계정을 어떤 범주로 묶어야 하는지 판단하는 데도 시간을 썼다(수탁대행사업원가를 빼야 한다는 걸 알아내는 데까지 시행착오가 있었던 것도 이 때문이다). 제한된 시간 안에 Tableau로 원하는 형태의 차트를 구현하는 것도 만만치 않았다.

그중에서도 방법론적으로 가장 남는 경험은 따로 있었다. 가설 3의 사채 수치를 정리하는 과정에서 AI가 산출한 값을 그대로 신뢰했다가, 원본 시산표와 대조한 뒤에야 오류를 발견한 일이었다. AI는 계산이나 요약을 빠르게 해주지만, 결과를 그대로 쓰기 전에 원본 데이터로 한 번 더 대조하는 절차가 반드시 필요하다는 걸 이번에 직접 확인했다. 이번 프로젝트 전체가 사실 그런 식이었다. 첫 SQL 결과가 보도자료 수치와 벌어졌을 때도, 사채·장기차입금 수치를 다룰 때도, 결국 공식 수치나 원본 문서와 대조하는 과정을 거쳐야 신뢰할 수 있는 결론에 도달했다.

“781원 손실”이라는 작은 숫자에서 출발했지만, 데이터를 파고들수록 훨씬 큰 문제의 본질에 닿았고, 그 본질은 예상보다 심각했다. 문제가 복잡해도 문제정의 → 가설 → 검증 → 인사이트 → 액션이라는 단계를 순서대로 거치면 실마리를 찾을 수 있다는 걸, 이번 4일짜리 프로젝트로 직접 확인한 셈이다.


다음 단계로 확장한다면

발표 마지막에 정리한 확장 계획은 네 가지다. 9호선처럼 운영기관이 이원화된 구간의 정산구조를 반영해 평균운임 계산을 더 정교화하는 것, 기후동행카드 손실을 공식 데이터로 직접 검증하는 것, “고령화가 원인”이라는 언론의 설명을 자체 데이터로 검증해보는 것, 그리고 호선·역 단위로 세분화해 어느 구간이 적자를 더 키우는지 분석하는 것. 지금은 전사 단위 숫자만 봤지만, 다음 단계는 그 안을 더 잘게 쪼개보는 방향이다.


취업 부트캠프 청년취업사관학교 새싹 aipm dx교육 ai교육 실무프로젝트 실무경험 취업포트폴리오 포트폴리오 전z전능 코멘토 모비니티