문제 정의데이터 이해 모델 설계업무 판단
1 / 15
END-TO-END ML CASE STUDY

견적 일관성 · 예산 초과 · 수익성 관리를 위한
건설 프로젝트 비용 예측

주어진 문제를 업무 언어로 재정의하고, 데이터로 검증한 판단의 기록 — 역기획형 보고 흐름

≈0
대치의 비용 — RMSE 격차 실측 (933 ↔ 4,043)
0 종
실측 비교 모델 (기본 8 + 최신 5)
0 행
실물 데이터 검증 (가스터빈 NOx)
← → 이동 · r 리플레이 · t 테마 · ? 도움말
문제 정의

첫 장은 "왜 이 분석이 필요한가"에 답한다

주어진 문제(건설 비용 예측)를 내가 정의한 업무 문제처럼 재구성했다.

Q1 왜 필요한가견적 오차·예산 초과·수익성 저하를 줄이기 위해 — 견적 의사결정의 객관성 확보
Q2 무엇을 예측하나최종 견적 금액 Total_Estimate (연속형 → 지도학습 회귀)
Q3 어디에 쓰나초기 견적 검토 · 예산 시뮬레이션 · 리스크 판단
난이도의 실체이 문제의 진짜 난이도는 모델이 아니라 결측 대치다 — 5% 결측이 성능의 지배 요인 (슬라이드 6에서 실측)
"본 분석은 비용 요인으로 최종 견적 금액을 예측하되, 어떤 조건에서 얼마나 틀리는지까지 함께 보고해 견적 의사결정의 객관성을 높인다." 보고서 첫 장의 문제 정의 문장 — 결론(슬라이드 14)과 수미상관으로 연결된다
근거: 역기획형 보고서 원칙
데이터 이해

데이터는 변수 목록이 아니라 문제의 구조다

Construction Estimation Data — 1,000행 × 6열, train 800 / test 200 (random_state=42)

입력 변수 X자재비 · 인건비 · 이윤율(10~30%) · 할인/할증+ 도메인 파생 3 (기초원가·비용비율·이익금액) = 총 7피처
회귀 모델비용 요인 ↔ 견적 금액의 관계 학습
예측 대상 y최종 견적 금액 Total_Estimate
Total_Estimate = (Material_Cost + Labor_Cost) × (1 + Profit_Rate/100) + Discount_or_Markup 데이터셋에 명시된 생성 공식 — 데이터가 결정식 기반임을 뜻하며, 이후 모든 해석의 기준이 된다
컬럼의미비고
Material_Cost재료비결측 5% (54행)
Labor_Cost인건비결측 5% (51행)
Profit_Rate이익률 (10·15·20·25·30%)이산값
Discount_or_Markup할인(−)/할증(+) 조정값—
Policy_Reason조정 정책 사유무정보 확인 → 모델 제외
Total_Estimate최종 견적 금액예측 타깃 y
근거: 데이터셋 명세 (생성 공식 정의 포함) · EDA 노트북 결측 카운트
데이터 이해EDA

시각화마다 "그래서 무엇을 알 수 있는가"를 남겼다

의사결정에 쓴 발견 3가지만 보고한다 (전체 EDA는 분석 노트북 참조).

타깃과의 상관 (피어슨 r)

Material_Cost0.80
Labor_Cost0.50
Discount_or_Markup0.33
Profit_Rate0.17

Material_Cost 0.80 = 상관 1순위 — 이후 피처 선택과 계수 해석의 기준이 된다

결측이 실재한다 — 5%

수치 4개 열에 각 5% 결측 → 처리 전략이 곧 성능을 좌우한다는 신호 (슬라이드 5·6)

공식이 복원된다 — 오차 ≈ 2.5×10⁻¹¹

명시된 공식으로 재계산한 최대 오차가 사실상 0 → 노이즈 없는 결정식 데이터. 문제의 난이도는 "관계 찾기"가 아니라 "데이터 품질"

이상치는 구조적

큰 금액 = 큰 프로젝트(정상 관측) → 제거보다 보존 + 모델로 설명을 선택

근거: EDA 노트북 출력 · 도메인 피처 리서치 노트 (r=0.7989/0.4972/0.3251/0.1724)
데이터 이해전처리 전략

처리 방법보다 "왜 그렇게 처리했는가"

전처리는 모델이 학습 가능한 형태로 바꾸는 설계 과정이다 — 판단 3가지.

① 결측 5% → median 대치 유지

결측 5%(Material 54행·Labor 51행)를 행 제거·역산 복원도 가능했지만 대치를 유지했다. 실제 데이터는 구멍이 나기 마련이고, 실무에서는 결측 행을 버릴 수 없는 경우가 많기 때문. 대신 그 비용을 측정해 보고한다(다음 장).

② 기준은 train에서만 결정

대치 중앙값·스케일러 전부 train 800건으로 fit → test에 동일 적용. split 전에 전체 데이터로 fit하면 test 정보가 새는 data leakage — 전 파이프라인에서 위반 0.

③ 파생 7피처

공식 구조를 아는 도메인 지식으로 Total_Base_Cost·Cost_Ratio·Profit_Amount 파생. 기여는 실험으로 검증: LR +1.91%, RF +5.82% (ablation, 4→7피처).

Raw Data결측 5% · 원본 4피처
→
Clean Datamedian 대치 (train 기준)
→
Model Ready파생 3피처 · 표준화(선형계열)
→
Validationtrain 800 / test 200 · 5-fold CV
근거: 전처리 노트북 셀 · ablation 출력 (RMSE_4feat→RMSE_7feat)
데이터 이해핵심 판단

전처리 선택의 비용을 실험으로 측정했다 — ≈ 3천 RMSE

"점수가 낮아졌다"가 아니라 "현실적 전처리를 선택했고, 그 비용을 정량적으로 안다".

결측 0 원본 (탐구 상한)0
채택 트랙 (5% 결측 + 대치)0
격차 ≈3,110 = 대치의 비용
대치 단독 효과 (재현 실험)0

933.34 · 6,925.35 = 원본 4피처 기준 재현 실험 / 4,043.42 = 채택 트랙(7피처) — 전부 동일 분할(random_state=42)

격차의 지배 요인 = 결측 대치

동일 분할(rs=42)에서 5% 결측 + median 대치만 넣어도 933 → 6,925. 파생피처 순서 등 다른 요인이 아니라 대치가 오차의 대부분을 만든다 (레드팀 재현 실험으로 입증).

업무적 함의

성능 개선 투자는 모델 고도화보다 데이터 수집·정합성(결측 원천 차단)에 먼저 — 결측 0이면 선형 모델만으로 RMSE ~933 수준 도달 가능.

근거: results/defense_checks.json (decomposition: 933.34 → 6925.35) · 모델링 노트북 해설
모델 설계

모델은 하나만 쓰는 게 아니라 비교 기준을 만든다

Baseline → Compare → Improve. 그리고 이번엔 기준 모델이 이겼다.

Baseline · Linear Regression

5-fold CV
R² 0.9673 ± 0.0124
RMSE 3,104.07 ± 592.65
MAE 1,081.00

Compare · Random Forest

5-fold CV
R² 0.9403 ± 0.0133
RMSE 4,242.82 ± 447.79
MAE 2,803.35

Improve · RF GridSearchCV

27조합 × 5-fold
best: n_estimators 200 · max_depth 20 · min_samples_split 2
CV RMSE 4,226.53 (개선 +16)

Holdout(200건): Linear 4,043.42 vs 튜닝 RF 4,378.07 — 격차 334.65 (≈8%). 데이터가 준선형 구조인 데다 대치 노이즈가 트리의 분할 이점을 상쇄 → 단순한 모델이 구조적으로 유리했다.
Linear4,043.42
튜닝 RF4,378.07
"가장 좋은 모델"이 아니라 "왜 이 모델이 적절한지"의 비교 논리 — 튜닝(+16)보다 데이터 품질(≈3천)이 지배 요인이라는 결론과 일관

모델을 더 확장해도 같았다: Poly(deg2) 4,014.37 · Ridge 4,043.43 · GBR 4,396.09 — 최고 개선 +0.7% 한계 (7피처 통합 리더보드 실측)

근거: 모델링 노트북 · 확장 리더보드 출력 (전 수치 실측)
모델 설계평가와 해석

회귀는 "정확도"가 아니라 지표 3종으로 설명한다

최종 모델(Linear Regression, holdout 200건) — 숫자엔 "그래서 좋은가"까지.

0
R² · 설명력 — 견적 변동의 94.3%를 설명. 초기 검토용으로 충분
0
MAE · 평균 오차 — 절반 이상의 예측이 이 수준 안쪽
0
RMSE · 큰 오차 민감 — MAE의 2.9배 = 소수의 큰 실패가 존재

RMSE ≫ MAE 비대칭이 말하는 것

오차가 고르지 않고 소수 관측(대치된 행)에 집중 — 아래 잔차 분포의 0 주변 스파이크 + 두꺼운 꼬리가 그 증거. 결측이었던 건은 개별 검토가 필요하다는 운영 규칙 도출.

실제 vs 예측 산점도와 잔차 히스토그램 (dashboard.png 하단 2패널)

실제 실행 산출물 — data/dashboard.png 하단 2패널 (실제vs예측 · 잔차 분포)

과적합 진단

learning curve에서 train/validation 곡선 수렴, CV(3,104)와 holdout(4,043)의 격차도 대치 행 오차로 설명됨 → 과적합 아님. 격차가 크면 과적합을 의심하라는 기준을 적용해 확인.

Learning curve — train/validation RMSE 수렴 곡선

실제 실행 산출물 — 모델링 노트북 learning curve (LR · 튜닝 RF)

근거: 모델링 노트북 출력 (R² 0.943371 · MAE 1,407.42 · RMSE 4,043.417497)
모델 설계확장 ① 기본 모델 8종

데이터 구조가 모델 순위를 결정한다

결측 0 재구축 트랙(같은 800/200 분할)에서 기본 모델 8종 전수 실측 — Test RMSE.

표로 보기
모델Test RMSEMAER²
Polynomial (deg2)0.000.001.000000
Linear933.34624.790.996983
Lasso933.34624.790.996983
Ridge933.37624.830.996982
ElasticNet936.53628.110.996962
XGBoost1,254.60965.760.994548
RandomForest2,710.372,097.050.974555
DecisionTree5,019.123,856.490.912744

다항 RMSE 0.00은 누수가 아니다

공식에 (M+L)×PR 2차 상호작용이 실존 → degree 2가 생성 공식을 그대로 복원한 것 (재계산 오차 1.1×10⁻¹¹).

선형 4종은 통계적 동률

부트스트랩 95% CI(2,000회)가 전부 겹침 [~800, ~1,065] → 소수점 순위 경쟁은 무의미하다고 보고.

근거: results/classic_results.json · leaderboard_classic.csv · defense_checks.json
모델 설계확장 ② 피처 엔지니어링

도메인 공식은 가장 강한 피처다

Ridge 고정, 피처셋만 4→8개로 확장 — Test RMSE의 극적 변화.

FS0 원본 4피처933.37
FS1 +비용 합계933.35
FS2 +도메인 파생0.11 핵심 — 곱셈 항의 선형화
FS3 +공식 근사항0.09

트리 계열은 동일 실험에서 소폭 개선(RF 2,710→2,394) — 파생의 수혜는 선형 계열에 집중

계수 복원 실측: Material 1.192 (이론 1.197) · Labor 1.190 (1.197) · Profit_Rate 474.494 (474.751) · Discount 1.000 (정확) — 모델이 공식을 실제로 복원했다

표로 보기
피처셋RidgeRandomForestXGBoost
FS0 (4피처)933.372,710.371,254.60
FS1 (+합계)933.352,412.07981.20
FS2 (+도메인)0.112,430.221,011.47
FS3 (+공식근사)0.092,393.88865.78

Ridge Test RMSE

933.37

933.37 → 0.11 — 공식의 곱셈 항을 아는 순간 회귀는 산수가 된다.
knowledge injection(도메인 지식 주입)이며 test 정보 누수(leakage)와 구분됨 — 파생은 train 통계 없이 행 단위 계산.

근거: results/feature_set_comparison_day5.csv (Ridge FS0~FS3 · RF · XGB 전 수치)
모델 설계확장 ③ 최신 방법론 (2024–2026)

최신 방법론은 검증 문화와 함께 쓸 때 의미가 있다

deep-research(105 에이전트, 인용 검증) 권고에 따라 5종 직접 실행 — MLX 트랜스포머는 MacMini M4 Pro(Apple Silicon)에서 직접 구축. 원본 4피처, Test RMSE.

TabPFN v2197.39
MLX Transformer (PLE)223.90
MLX Transformer (linear)423.23
MLP (sklearn)992.71
LLM LoRA (Qwen2.5-0.5B)3,571.01

TabPFN 197.39는 조건부 — 1,000행은 스위트스팟(≤10k) 안. 36,733행 실물에선 서브샘플 강제·순위 역전 (다음 장)

표로 보기
모델RMSEMAER²학습(초)
TabPFN v2197.3971.390.9998658.46
MLX TF (PLE)223.90162.460.9998269.04
MLX TF (linear)423.23300.880.9993805.47
MLP sklearn992.71763.560.99658713.37
LLM LoRA3,571.012,745.300.955830181.04

1차 결론 (오류)

6,370.74

"PLE 임베딩은 문헌 권고와 달리 열세" — 그럴듯하지만 틀린 결론

품질 게이트가 뒤집은 결론

6,370.74 → 223.90

적대 검증이 "피처별 투영이 공유돼 피처 정체성 소실" 구현 결함을 적발 → 수정 후 문헌 권고 재현. 구현 디테일이 방법론 결론을 좌우한다

근거: results/modern_*.json (PLE notes에 게이트 이력 기재) · research/modern_methods_report.md
모델 설계실물 검증 · 가스터빈 NOx

랜덤 분할은 신기루였다 — 시간외삽이 진짜 시험이다

UCI 가스터빈 36,733행(2011–15)에 같은 방법론 적용 — NOx 예측 RMSE(mg/m³), 같은 모델·두 가지 분할.

E1 랜덤 분할E2 시간외삽 (2011–13 학습 → 2014–15 예측)
표로 보기
모델E1 랜덤E2 시간외삽격차
Ridge7.56010.119+2.56
Linear7.55910.127+2.57
RandomForest3.91012.645+8.74
MLX-PLE4.03012.700+8.67
TabPFN v23.71512.838+9.12
XGBoost3.89913.055+9.16
Polynomial5.57722.472+16.90

표시 7종 = 양 분할 공통 대표 (전체 11종은 results/gasturbine 원장). Polynomial: 합성 데이터의 0.00(공식 복원)이 실물 시간외삽에선 22.47 최악 — 공식이 없는 세계에서 다항의 몰락

순위의 반전

E1에선 TabPFN 3.715·XGB 3.899가 상위 — E2에선 전부 12~13대로 추락하고 Ridge 10.119가 최고. XGB는 CV 3.78이 Test 13.06으로 — 랜덤 CV의 이중 낙관을 정량 입증.

정직한 실패 보고

성공 기준(≤5 mg/m³)에 E2는 미달. 오라클 편향 보정을 실측해도 7.681로 여전히 미달 → "연 단위 재학습 + 드리프트 모니터링"을 처방으로 제시 (연도별 Ridge RMSE 2014 8.62 → 2015 11.39).

근거: results/gasturbine/classic_results.json · modern_results.json · defense_checks.json (oracle 7.681)
업무 판단

마지막 장은 모델 결과를 업무 활용으로 연결한다

모델 선택은 성능 · 해석 가능성 · 활용성을 함께 고려했다.

선택: Linear Regression

① holdout 최고 성능(4,043) ② 계수가 곧 설명 — 자재비 1원↑이 견적에 미치는 영향을 그대로 읽음 ③ 재학습·배포 비용 최소. 트리의 추가 복잡성이 이 데이터에선 보상되지 않음을 실험으로 확인.

활용 3가지

① 초기 견적 검토 — 입력 4개로 즉시 산출, 평균 오차 MAE ≈1,407 ② 예산 시뮬레이션 — 이윤율·할인 시나리오(계수 기반 what-if) ③ 리스크 판단 — 예측-실제 격차 큰 건(잔차 ±2만 꼬리) 우선 검토, 결측 대치된 건은 별도 플래그.

투자 우선순위

모델 튜닝의 개선은 +16 RMSE, 결측 제거의 개선은 ≈3,000 RMSE — 다음 투자는 모델이 아니라 데이터 수집·정합성. 실물(가스터빈)에선 시간 드리프트 대응(재학습 주기)이 추가된다.

튜닝 개선+16
데이터 개선≈3,000
교육용 데이터의 결론이 실물에서도 유지되는지 가스터빈으로 재검증했고, "평가 프로토콜(분할 설계)이 성능 숫자보다 중요하다"는 운영 원칙을 얻었다.
근거: 모델링 노트북 결론 · defense_checks.json · gasturbine 결과 전체
업무 판단한계 · 결론

좋은 보고서는 한계와 개선 방향까지 제시한다

한계

  • 교육용 결정식 데이터 — 실제 현장의 노이즈·비선형성 부재
  • 규모·지역·공정·계약 조건 변수 없음
  • 결측이 순수 무작위라 가정(MCAR) — 실제로 패턴이 있다면 대치 전략 재검토 필요
  • 실물 검증(가스터빈)에서 시간외삽 기준(≤5) 미달

개선

  • 현장 변수 추가 수집 (규모·지역·공정·계약)
  • 결측 원천 차단(입력 시스템 정합성) — 기대 효과 ≈3천 RMSE
  • 드리프트 모니터링 + 연 단위 재학습
  • 대치 건 플래그 운영 (개별 검토 루틴)
본 분석은 비용 요인으로 최종 견적 금액을 예측해 견적 의사결정의 객관성을 높인다는 첫 장의 문제 정의로 돌아온다 — R² 0.94의 예측과 함께, 어떤 조건에서 얼마나 틀리는지까지 아는 것이 이 보고의 결론이다. 문제 정의(슬라이드 2)와 수미상관
✓ 문제를 업무 언어로 재정의했는가
✓ EDA 결과에 해석 문장이 있는가
✓ 모델 선택 이유가 분명한가
✓ 평가 지표를 정확히 설명했는가
✓ 현업 활용과 한계를 제시했는가
✓ (자체 추가) 모든 수치가 실행 산출물 원장과 일치하는가 — 창작 0
역기획형 최종 체크리스트 5 + 자체 품질 게이트 1
부록예상 질문 사전 검증

까다로운 질문은 미리 받았다 — 레드팀 스웜 35플래그 중 발췌

같은 문제를 푸는 동료가 많다 → 애매한 지점을 6렌즈 적대 검증으로 선제 점검, 답변은 전부 실측 근거.

Q. 다항 RMSE 0은 과적합/누수 아닌가아니다 — 생성 공식의 2차 항을 복원한 것. 재계산 오차 1.1×10⁻¹¹, 파생에 train 통계 불사용 (누수 정의 불충족)
Q. 933 vs 4,043 어느 쪽이 진짜인가둘 다 — 933은 결측 0 원본의 상한, 4,043은 대치를 유지한 채택 트랙. 격차의 지배 요인(대치)을 재현 실험(6,925)으로 분해해 보고
Q. 선형 4종 순위 차이는 의미 있나없다 — 부트스트랩 95% CI 전부 겹침(통계적 동률). 순위가 아니라 "선형 계열이 동률 그룹"이 결론
Q. 가스터빈 E1에도 문제가 있지 않나있다 — 시계열 자기상관 누수 가능성을 인정하고, 그래서 E2(시간외삽)를 본 시험으로 채택. 오라클 보정 7.681도 기준 미달로 정직 보고
노트북 4권 · 에러 0대시보드 2종보고서 PDF 12쪽 (역기획형) deep-research 105 에이전트레드팀 6렌즈 35플래그방어 실험 3종 전 수치 = results/ 원장
근거: research/redteam_flags.json (7문답 전문) · defense_checks.json
건설비 예측 ML 케이스 스터디 · 2026 · Jinhyun An