Kaggle Growth 기록: ROGII Wellbore에서 첫 회귀 베이스라인 제출하기
Kaggle Growth Lab에서 Orbit Wars가 agent와 simulation을 연습하는 트랙이었다면, ROGII Wellbore Geology Prediction은 훨씬 더 정석적인 머신러닝 트랙이다. 데이터를 읽고, target을 이해하고, baseline을 만들고, validation을 의심하고, submission.csv를 제출하는 흐름이 뚜렷하다.
이번 글은 ROGII - Wellbore Geology Prediction 대회에서 첫 valid submission을 만든 기록이다. 목표는 높은 점수를 주장하는 것이 아니라, Kaggle 회귀 대회를 다루는 기본 루프를 남기는 것이다.
이번 결과
먼저 결과부터 적어둔다.
| 항목 | 값 |
|---|---|
| Kaggle status | Succeeded |
| Public RMSE | 15.883 |
| Notebook | notebook7f0789fa3b |
| Version | V2 |
| Runtime | 36s |
| Baseline | TVT_input interpolation + median fallback |
| submission rows | 14151 |
| NaN count | 0 |

이 점수는 “모델이 좋다”는 증거라기보다, 제출 파이프라인이 처음으로 끝까지 연결됐다는 증거에 가깝다. Kaggle notebook에서 competition data를 붙이고, internet을 끄고, submission.csv를 만들고, 대회에 제출해서 평가까지 받은 것이다.
문제를 어떻게 이해했나
이 대회는 horizontal wellbore를 따라 tvt를 예측하는 회귀 문제다. tvt는 True Vertical Thickness를 의미한다. 지질학 도메인을 깊게 안다고 말할 수는 없지만, Kaggle 관점에서 먼저 확인해야 할 것은 비교적 명확했다.
데이터는 well 단위로 나뉜다. 각 training well에는 대략 다음 파일이 있다.
1 | {WELLNAME}__horizontal_well.csv |
horizontal_well.csv에는 측정 깊이, 좌표, gamma ray log, target인 TVT, 그리고 TVT_input 같은 값이 들어 있다. typewell.csv에는 vertical reference에 가까운 TVT, GR, Geology가 들어 있다. PNG는 사람이 구조를 이해하는 데 도움을 주지만, 첫 baseline에는 쓰지 않았다.
처음부터 복잡한 모델을 만들기보다, 나는 세 가지 질문만 잡았다.
sample_submission.csv가 요구하는 row는 무엇인가?TVT_input은 target과 어떤 관계인가?- 같은 well 안의 row를 random split해도 되는가?
이 세 질문이 첫 baseline의 방향을 결정했다.
왜 random row split을 경계했나
이 대회에서 가장 조심해야 할 것은 validation leakage다.
wellbore 데이터는 같은 well 안의 row들이 서로 독립적이지 않다. 같은 trajectory, 같은 local geology, 비슷한 gamma ray pattern, 같은 typewell reference를 공유한다. 그래서 row를 무작위로 섞어 train/validation으로 나누면, validation set이 사실상 이미 본 well의 이웃 row가 될 수 있다.
그렇게 만든 validation score는 실제 hidden test 성능보다 좋아 보일 가능성이 높다. 그래서 이 대회에서는 모델보다 validation 설계가 먼저다.
내가 잡은 원칙은 단순하다.
1 | 나쁜 출발점: random row split |
즉, 어떤 well은 통째로 학습에 쓰고, 어떤 well은 통째로 검증에 남겨야 한다. 그리고 실제 evaluation zone과 비슷하게 TVT_input을 일부 구간에서 가려보는 방식이 필요하다.
이번 첫 제출에서는 아직 정교한 validation을 완성하지 않았다. 대신 “제출 가능한 baseline을 먼저 만들고, 그다음 validation을 강화한다”는 순서로 진행했다.
첫 baseline: TVT_input interpolation
첫 baseline은 매우 단순하다. TVT_input이 존재하는 구간을 이용해 evaluation zone의 missing 값을 well 내부에서 보간한다. 남는 결측은 per-well median이나 global median으로 채운다.
이 접근이 가능한 이유는 TVT_input이 evaluation zone 밖에서는 target인 TVT의 복사본에 가깝기 때문이다. 물론 이것만으로 충분한 모델이라고 볼 수는 없다. 하지만 지질 위치가 well을 따라 어느 정도 연속적으로 변한다면, interpolation은 제출 가능한 첫 기준선이 될 수 있다.
전략은 이렇게 정리했다.
1 | 1. test horizontal well 파일을 읽는다. |
중요한 것은 예측값 자체보다 submission contract다. Kaggle은 submission.csv의 형식이 틀리면 모델 성능을 보기 전에 실패한다.
이번 제출에서 확인한 contract는 다음과 같다.
1 | columns: id,tvt |
이런 체크는 지루하지만 중요하다. Kaggle에서 첫날 해야 하는 일은 대단한 모델을 만드는 것이 아니라, 실패하지 않는 제출 루프를 만드는 것이다.
public score 15.883을 어떻게 볼 것인가
Public RMSE 15.883은 첫 benchmark로 기록했다. 하지만 이 숫자를 과하게 해석하지 않으려고 한다.
이 baseline은 interpolation이 잘 먹히는 구간에서는 괜찮을 수 있다. 반대로 evaluation zone이 길거나, 주변에 쓸 만한 TVT_input anchor가 부족한 well에서는 약할 가능성이 크다. 또한 public leaderboard는 hidden evaluation 전체를 대표하지 않을 수 있다.
그래서 이 점수의 의미는 하나다.
이제 비교할 수 있는 첫 기준선이 생겼다.
앞으로 어떤 tabular model이나 typewell correlation feature를 추가하더라도, 최소한 이 interpolation baseline과 비교해야 한다. 더 복잡한 모델이 이 기준선을 이기지 못한다면 복잡함을 추가할 이유가 없다.
공개 notebook은 어떻게 다룰 것인가
ROGII에는 강한 public notebook도 있다. 예를 들어 ridge artifact, particle filter, projection 같은 domain-specific 구조를 활용하는 reference가 있었다.
이런 notebook은 공부할 가치가 크다. 하지만 첫 제출을 public solution 기반으로 시작하면 내 실험 기록이 흐려진다. 그래서 순서를 분리했다.
1 | 1. 내 손으로 단순 EDA와 interpolation baseline을 만든다. |
이 순서는 포트폴리오 관점에서도 중요하다. 좋은 점수를 낸 코드보다 더 중요한 것은, 내가 어떤 문제를 어떤 기준으로 이해하고 개선했는지 설명할 수 있는 기록이다.
다음 실험
다음 단계는 score chasing이 아니라 validation 강화다.
우선순위는 이렇게 잡았다.
- well-level group validation 만들기
TVT_inputinterpolation baseline의 local validation 점수 기록MD,X,Y,Z,GR, row position 기반 light tabular model 만들기- interpolation baseline과 tabular model 비교하기
- typewell
GRcorrelation feature를 천천히 실험하기
특히 GR은 이 대회에서 중요한 신호일 수 있다. horizontal well의 gamma ray log와 typewell의 gamma ray signature가 잘 맞는다면, 지질 위치를 추정하는 데 도움이 될 수 있다. 다만 이것은 첫 제출 이후의 작업이다.
마무리
ROGII 첫 제출에서 배운 것은 간단하다.
Kaggle 회귀 대회의 첫 목표는 모델링이 아니라 제출 가능한 기준선을 만드는 것이다. 데이터 구조를 읽고, leakage 위험을 적고, baseline을 만들고, 제출 형식을 검증하고, public score를 첫 benchmark로 남긴다.
이 과정을 거치면 다음 실험이 훨씬 분명해진다. 이제 질문은 “무슨 모델을 써볼까?”가 아니라 “이 baseline을 어떤 검증 기준에서 이길 수 있을까?”가 된다.
Kaggle Growth Lab에서는 이 차이를 계속 기록하려고 한다. 점수보다 중요한 것은 재현 가능한 실험 루프다.
댓글
GitHub 계정으로 의견을 남길 수 있습니다. 댓글은 GitHub Discussions에 저장됩니다.