
FEMA 지도를 이긴 홍수 모델을 만들었다. 그런데 그것이 신고를 막았다.
이 데모를 만들면서 가장 흥미로운 순간이 소프트웨어가 나에게 안 된다고 말하는 것일 줄은 몰랐다.
한 번도 본 적 없는 데이터에서 실제 홍수 손실을 FEMA 홍수 구역보다 더 잘 순위화하는 복합 요율 요소를 갖고 있었다. 빌더로서의 모든 직감으로 그건 승리였다. 출시하면 된다. 그런데 파이프라인의 마지막 단계가 빨갛게 켜지며 NOT FILING-READY를 출력하고, 최악의 변수 하나를 지목한 뒤 인간 보험계리사에게 라우팅했다. 내가 자랑스러워하던 요율이 신고해도 안전하지 않다고 내 코드가 스스로 판단한 것이다. 그게 버그인지 핵심인지 결정하느라 잠시 앉아 있었다.
그게 바로 핵심이었다. 이 글은 이제 내가 왜 신고를 거부하는 게이트가 그 뒤의 모델보다 더 가치 있다고 생각하는지에 대한 것이다.
데모 이름은 FloodProof다. 텍사스주 해리스 카운티의 National Flood Insurance Program 청구에 대한 실제 공개 장부를 OpenFEMA에서 가져와 돌린다. Re-run Diagnostic을 클릭하면 아홉 단계가 실제 기록 위에서 실시간으로 실행되고 1초 안에 끝난다. 하드코딩된 것은 없다. 고정 시드가 분할을 재현 가능하게 만들어, 내가 곧 인용할 숫자는 매번 실행마다 다시 계산된다.

나를 멈춰 세운 첫 숫자는 어떤 모델도 만들지 않은 것이었다
이 수치로 자꾸 돌아오는 이유는 내가 계산한 게 아니라 청구가 계산했기 때문이다. 이 해리스 카운티 장부에서 실제 지급된 건물 청구 달러 중 $3.1 billion, 즉 45.9%가 FEMA가 고위험 구역 바깥으로 평가한 부동산에 지급되었다 (특별홍수위험지역(SFHA)). 모델도 없다. 점수도 없다. 실제 장부를 합산한 것뿐이다. 보험사가 여전히 홍수 요율의 기준점으로 삼는 그 구역 지도는 거의 절반의 돈에 대해 침묵했다—실제로 문 밖으로 나간 그 돈에.
들어가기 전에 읽었던 내용과도 맞았다. 미국 홍수 피해의 3분의 2 이상이 FEMA 고위험 구역 바깥에서 발생하고, 허리케인 하비 이후 해리스 카운티 홍수 청구의 약 70%가 그 구역 바깥에서 나왔다(Veriprajna 솔루션 페이지 리서치, 2026). 통계로는 믿었다. 실제 달러가 지구(tract)별로 내 화면에서 쌓이는 걸 보면 느낌이 다르다.

구역 지도는 살짝 빗나간 게 아니었다. 단일 카운티 장부에서 실제 손실 $3.1 billion에 대해 침묵했다.
그러니 그 지도는 뭉툭한 도구다. 홍수 가격 책정을 하는 사람은 이미 다 안다. 시장의 답은 벤더에게서 더 나은 모델을 사는 것이었다. 나는 더 나은 모델이 정말 어려운 부분인지, 아니면 어려운 부분이 내가 보지 않던 곳에 있는지 알고 싶었다.
평범한 건물 속성 여섯 개가 구역 지도를 이길 수 있을까?
평범한 릿지 회귀가 바늘을 많이 움직일 거라 생각하지 않았다. 채점 코어는 의도적으로 화려하지 않다: 실제 OpenFEMA 건물 속성—건물 연식, 층수, elevated 플래그, post-FIRM 코드 준수, 점유, 장애물—의 릿지 복합. 정직한 특성 여섯 개. 첫 본능은 보험 건물 보장액도 넣으려는 것이었는데, 보장액이 지급과 상관있기 때문이다. 스스로를 붙잡았다. 지급은 보장액으로 기계적으로 상한이 걸리므로, 넣으면 점수가 답을 훔쳐 보고 백테스트가 순환이 된다. 잘랐다. 그 한 번의 삭제가 데모와 마술 쇼의 차이다.
백테스트는 비순환이 되도록 짜였다. 70% 학습 분할에 복합을 적합한다. 한 번도 보지 못한 홀드아웃 30%에 채점하는데, 그게 실제 청구 40,615건. 실제 ratedFloodZone을 베이스라인으로, 실제 amountPaidOnBuildingClaim을 레이블로 비교한다. 베이스라인과 레이블 모두 모델과 독립이므로, 승리는 자기 채점이 아닌 진짜 표본 외 승리다.

예상보다 더 크게 이겼다. 복합이 포착한 것은 1.694배의 FEMA 구역 상위 십분위 손실 달러(홀드아웃 청구 기준)였고, 지니는 구역의 0.08 대비 0.31이었다. 운이 좋은 분할이 아니었는지 확인하려고 임의 시드들로 다시 돌렸다. 리프트는 유지되었고, 시드에 따라 대략 1.69에서 1.85였다. 평범한 속성 여섯 개를 정직하게 적합했을 뿐인데, 한 번도 본 적 없는 돈에서 연방 홍수 지도를 이겼다.
그리고 바로 그 지점에서 시장 전체가 저지르는 실수를 나도 거의 할 뻔했다.
빌드 전체를 재구성한 깨달음
그 시점에 데모는 사실상 끝났다고 생각했고, 그건 틀렸다. 스스로 채점하는 더 나은 모델은 증거가 아니다. 수석 보험계리사에게 요소를 건네며 "날 믿어, 구역을 이긴다"고 말하면, 내 숙제 위에 내가 매긴 점수를 같이 건네는 셈이다. 가치는 애초에 모델이 될 수 없었다. ZestyAI, ICEYE, First Street 같은 벤더는 이미 강한 홍수 모델을 판다. 내구성 있는 것은 어떤 모델 주변의 지루한 인프라: 회의론자가 무시할 수 없는 백테스트, 모델이 말로 빠져나갈 수 없는 공정성 감사, 그리고 신고물을 만들거나 거부하는 게이트다. 그것은 어떤 모델 품질에서도 성립한다, 그래서 모델이 좋아져도 낡아지지 않는다. 메커니즘과 정직한 공개는 다음에서 직접 확인할 수 있다: veriprajna.com/ko/demos/flood-risk-underwriting.
스스로 채점하는 더 나은 모델은 증거가 아니다. 내 숙제 위에 내가 매긴 점수를 올린 것일 뿐이다.
모델이 전부일 수 없는 두 번째, 더 어려운 이유가 있다. 손실을 잘 순위화하는 요소는 인구통계 신호도 실을 수 있고, 차별적 영향 테스트를 통과하지 못하는 요율은 보험국(Department of Insurance) 심사관이 반려하는 신고다. 잘 순위화하는 것과 신고 가능하다는 것은 다른 질문이다. 나는 첫 번째에 답했다. 두 번째가 기다리고 있었다.
공정성 감사를 내 모델에 겨누고 그것이 악당일 거라 기대했다
진심으로 내 복합이 문제일 거라 각오했다. 감사는 가격이 매겨진 모든 변수를 CDC/ATSDR 사회적 취약성 지수(2022 릴리스)의 실제 지구(tract) 단위 소수자 비율과 대조해 스크리닝하고, 각각에 대해 부정적 영향 비율을 계산한 뒤 EEOC 5분의 4 규칙, 즉 0.80에서 1.25 대역(29 CFR 1607.4(D))과 대조한다. 화려한 AI 점수가 인구통계 대리 변수를 싣고 있을 거라 가정했다.
그렇지 않았다. 복합 점수 자체는 부정적 영향 비율 0.938로 통과한다. 내 모델이 나쁜 놈인 척하려고 데모를 만든 것도 아니고, 실제로도 아니다. 하지만 감사는 모든 것을 스크리닝하고, 가격이 매겨진 변수 5개가 80% 규칙을 실패한다. 최악은 층수로 0.363이다. 보험가액은 0.526으로 실패한다. 그리고 진짜로 놀란 것: FEMA 자체의 구역 티어가 1.467로 실패한다, 높은 쪽에서의 실패가 내 복합이 어느 쪽에서든 보이는 것보다 더 나쁘다. 모두가 안전하고 중립적이며 규제 당국이 축복한 기준점으로 취급하는 그 베이스라인이, 사람들이 불안해하는 AI 요소보다 더 많은 인구통계 왜곡을 실는다.

내 AI 요소는 0.938로 공정성 테스트를 통과했다. FEMA 구역 티어는 1.467로 실패했다.
그 역전이 내가 보험계리사에게 가장 붙잡고 앉아 생각해 보길 바라는 지점이다. 모델을 불신하고 지도를 신뢰하는 본능은, 이 장부에서는 거꾸로다.
내가 신고하기도 전에 스스로 막았다
다음에 일어난 일을 정확히 말하고 싶다. 내가 가장 자랑스러운 부분이고, 전적으로 드라마 없는 코드이기 때문이다. 정책 게이트는 순수 Python에 규칙 하나다: 홀드아웃 표본이 충분히 크고, FEMA 구역 대비 리프트가 요구 최소치를 넘고, 스크리닝된 모든 변수가 공정성 대역 안에 있을 때만 신고 준비가 된다. 기본은 거부. filing_ready는 차단 소견이 제로일 때만이다. 이 장부에서는 변수가 실패했으므로 게이트는 NOT FILING-READY를 반환하고, 층수를 최악의 위반으로 지목한 뒤 요율을 출시하는 대신 인간 계리 정당화로 라우팅했다. 주별 체크리스트도 돌렸고, 콜로라도의 변수별 정당화 요건은 미완료로 나타났다.
스택의 선택적 부분은 Pydantic-AI 에이전트 소규모 팀—요소 설명기, 적대적 도전자와 짝을 이룬 공정성 정당화기, 신고 메모 초안기—이다. 그들은 조언한다. 서사를 초안한다. 게이트를 덮어쓸 수 없고, API 키가 없으면 기권하며 결정론적 결과는 그대로다. 신뢰가 중요한 모든 숫자는 에이전트 프레임워크 밖의 평범한 numpy다. 에이전트는 조언하고, 코드가 결정한다. 이 빌드의 벤더 피드(ZestyAI Z-FLOOD, ICEYE SAR-depth)와 Guidewire 커넥터는 실제 스키마 뒤의 스텁이며, 문서화된 프로덕션 교체이지 라이브 연동이 아니다. 없는 파이프를 암시하기보다 그렇게 분명히 말하고 싶다. 전체 패키지, 신고 산출물까지 포함해, 다음 주소에 있다: veriprajna.com/ko/demos/flood-risk-underwriting.
게이트가 거부할 때 만드는 것은 막다른 길이 아니다. 심사관이 바로 검토할 수 있는 DOI 신고 패키지다: 계리 의견서, 표본 외 백테스트 표, 특성 기여도, 공정성 스크린, 그리고 무엇을 왜 인간에게 라우팅했는지에 대한 명시적 진술. 증거 산출물이지 인증이 아니고, 어떤 심사관이 무엇을 승인했다는 약속도 아니다. 심사관이 요구하는 서류 추적(paper trail)을, 요구하기 전에 조립해 둔 것이다.
나는 이것을 심사관보다 먼저 컴플라이언스 위험을 잡는 일이라고 부른다. 그게 구매자 가치 한 줄이다. 대안은 요율이 차별적이라는 걸 신고한 뒤에, 공개 서한으로 알게 되는 것이다.
내가 계속 붙잡고 있는 것
이 빌드에 들어올 때 나는 더 나은 홍수 모델을 만든다고 가정했고, 나갈 때는 모델이 가장 덜 중요한 부분이라는 확신이 들었다. 정직한 공개가 정확도보다 중요하다. FEMA는 청구 지리좌표를 대략 지구 중심점까지 검열하므로, 이 실행은 공개 데이터가 정직하게 허용하는 해상도에서 돌아가고, 데모는 화면에 그렇게 말한다. 리프트는 해리스 카운티 장부 하나와 홀드아웃 분할 하나이지, 열린 세계 보장이 아니다. 그 한계를 이름 붙이는 것은 피치의 약점이 아니다. 그것이 피치다.
24개 넘는 주가 NAIC AI Model Bulletin을 채택하고, 뉴욕 DFS Circular Letter 2024-7이 대리 차별 테스트를 예의가 아니라 기대로 만들면서, 신고를 거부하는 코드는 서류 작업이기를 멈추고 제품이 되기 시작한다. 요율 요소는 애초에 어려운 부분이 아니었다. 그것을 증명하고 거버넌스하는 일이 어려웠다.
직접 결정하는 모습을 보는 편이 내 말만 믿는 것보다 낫다면, 여기 처음부터 끝까지 돌아가는 전체가 있다.
그래서 내가 아직 스스로에게 완전히 답하지 못한 질문이 있고, 보험계리사의 의견을 진심으로 듣고 싶다. 수년간 요율을 앵커링해 온 FEMA 구역 티어가, 새 AI 요소에 곧 적용할 바로 그 공정성 테스트에서 실패한다고 당신 자신의 감사가 말한다면, 당신은 어느 쪽을 먼저 불신하기 시작하는가?


