sgkstudio.
엔지니어링

크몽 신규 판매자, 칸을 고르는 통계가 세 번 틀렸다

크몽 신규 판매자가 어느 칸에 gig을 올릴지 통계로 가리려다, 표본 편향과 순환논증 세 번, 검정 코드 버그 세 건을 차례로 잡았고 진입 후보는 4칸에서 1칸을 거쳐 0칸이 됐습니다. 남은 것은 칸을 바꿔도 얻을 게 없다는 결론과, 칸보다 판매자가 깐 gig 수가 판매를 가른다는 신호였습니다. 틀린 주장과 고친 과정을 그대로 적습니다.

2026-09-25크몽 공개 목록 전수 150,501 gig · 371칸적대 검증 2회차에서 치명 지적 6건과 5건 반영2026년 9월 16일부터 18일까지 분석 문서 6회 개정

크몽 신규 판매자는 어떤 칸에 gig을 올려야 하는가

크몽 신규 판매자가 어느 칸에 첫 gig을 올릴지 통계로 정하려던 분석은 결국 후보 0칸으로 끝났습니다. 4칸으로 시작한 후보가 반대 심사를 거칠 때마다 줄어 1칸이 됐고, 마지막에는 우리가 팔 수 있는 칸이 하나도 남지 않았습니다.

크몽은 판매자가 상품(gig)을 올리고 구매자가 카테고리에서 골라 사는 프리랜서 마켓입니다. 신규 판매자는 리뷰가 0건이라 목록 하단에 걸리고, 광고로 노출을 사도 리뷰 0에서는 손실이 먼저 확정됩니다. 그래서 어느 칸에 들어가느냐가 첫 결정이 됩니다.

우리는 2026년 9월 16일에 사업자 인증 승인을 받았습니다. 그날부터 9월 18일까지 사흘 동안 분석 문서를 여섯 번 고쳤는데, 고친 내용의 대부분이 결론이 아니라 결론에 이르는 측정 방법이었습니다. 이 글은 그 과정에서 잡은 오류를 순서대로 적은 기록입니다.

  • 표본이 편향돼 있었습니다. 1,998 gig 표본의 결론이 전수 150,501 gig에서 뒤집혔습니다.
  • 비교가 순환이었습니다. 리뷰와 등급, 두 변수가 판매의 결과인데 판매의 원인처럼 읽었습니다.
  • 검정 코드에 버그가 있었습니다. 세 건 모두 결과를 바꿨습니다.

같은 종류의 분석을 할 계획이 있다면 뒤쪽 두 가지를 눈여겨보시기 바랍니다. 첫 번째 오류는 표본 크기 문제라 누구나 의심하지만, 순환논증은 숫자가 깔끔할수록 눈에 띄지 않습니다. 숫자가 깔끔하게 나왔을 때가 가장 위험하다는 점만 기억해도 됩니다. 비슷한 데이터 분석이 막힐 때는 상담에서 방법부터 같이 봅니다.

처음 잰 숫자는 무엇이었나

처음 근거는 크몽 사이트맵에 노출된 1,998 gig의 표본과, 같은 gig을 매일 다시 재서 판매 증분을 쌓은 6일치 기록이었습니다. 기간은 9월 11일부터 16일까지입니다.

  • 하루에 한 건이라도 판 gig은 4.3~9.2%였습니다. 90% 이상이 하루 판매 0건입니다.
  • IT·프로그래밍 대분류 6일 거래액은 1,075만 원이었고, 월로 환산하면 약 5,400만 원입니다. 이 칸 전체가 그 크기입니다.
  • 상위 10 gig이 거래액의 39%를 가져갔습니다.

여기서 칸별로 네 곳을 비교했습니다. 표본 기준으로 랜딩페이지만 리뷰의 벽이 낮고 단가가 높았습니다.

9월 16일 시점의 표본 기준 칸 비교
항목상세페이지애널리틱스크롤링랜딩페이지
1위 gig 리뷰(건)51958667092
단가 중앙(만 원)39455
gig 수(공급)661286

리뷰 92건이 1위인 칸은 IT 안에서 랜딩페이지뿐이었고, 단가는 55만 원으로 네 칸 중 가장 높았습니다. 공급은 gig 6개였습니다. 이 표만 보면 랜딩페이지 한 칸에 단독으로 들어가는 안이 합리적으로 보입니다. 리뷰 벽이 낮고 단가는 가장 높으며 경쟁자도 적다는 세 조건이 한꺼번에 맞아떨어졌기 때문입니다.

처음 세운 가설은 무엇이었나

가설은 두 개였고, 둘 다 표본의 공급 수에서 나왔습니다. 하나는 공급이 얇고 단가가 높은 칸에 들어가면 신규도 통한다는 가설이고, 다른 하나는 공급이 0에 가까운 칸은 기회가 아니라 수요가 없다는 신호라는 가설이었습니다.

  • 가설 1: 랜딩페이지는 공급 6, 1위 리뷰 92, 단가 중앙 55만 원이라 신규가 파고들 여지가 있다.
  • 가설 2: 업무 자동화는 6일 판매 0건, 상담봇은 6일 판매 1건에 15만 원이므로 공급이 적은 이유가 수요 부재다. 둘 다 올리지 않는다.

이 가설에 맞춰 랜딩페이지 단독 진입으로 방향을 잡았습니다. 상세페이지는 실제 상위 gig 산출물을 열어 보니 커스텀 장식과 고객 실사진이 화면의 60~70%를 차지하는 비주얼 작품이었고, 우리 파이프라인은 텍스트 레이아웃이라 다른 능력이라고 판단해 뺐습니다.

이 시점의 결론은 표본 하나에 기댄 판단이었습니다. 표본이 실제 크몽 전체와 얼마나 닮았는지는 아직 재지 않은 상태였습니다. 사이트맵에 오른 gig이 전체를 대표한다는 보장이 없는데도, 그 확인 없이 표본 값을 결정 근거로 썼습니다. 검증보다 결정이 먼저 나간 순서가 첫 번째 잘못이었습니다.

전수로 다시 재니 가설은 어디서 틀렸나

카테고리 목록 API로 전수를 받자 표의 숫자가 거의 전부 바뀌었습니다. 전수는 150,501 gig이고 371칸을 100% 덮었습니다. 랜딩페이지 공급은 6이 아니라 697이었습니다.

표본값과 전수값 비교(IT·마케팅)
항목표본값전수값판정
랜딩페이지 공급(gig)6697뒤집힘
랜딩페이지 1위 리뷰(건)92278뒤집힘
랜딩페이지 단가 중앙(판매 gig, 만 원)5520뒤집힘
애널리틱스 1위 리뷰(건)586587유지
애널리틱스 공급(gig)12103뒤집힘
크롤링 1위 리뷰(건)670670유지
크롤링 공급(gig)8780뒤집힘
랜딩페이지 칸의 gig 공급 수. 표본에서는 6개, 전수에서는 697개
공급 6개라던 칸에 gig 697개가 있었다

가설 1이 무너진 지점은 두 곳입니다. 공급이 얇다는 전제가 표본 착시였고, 1위 리뷰가 92라는 말도 틀렸습니다. 리뷰 92건에 해당하는 gig은 108954번(AEO 랜딩)과 129841번(프랜차이즈 랜딩)이고 현재 리뷰는 94건인데, 전수 순위로는 7위와 8위였습니다. 1위는 리뷰 278건의 319602번 gig입니다.

가설 2도 같이 흔들렸습니다. 업무 자동화와 상담봇을 올리지 않기로 한 근거가 바로 공급이 적다는 사실이었기 때문입니다. 공급이 없어서 수요 0이라는 판단과 공급이 없어서 기회라는 판단 모두 표본이 만든 신기루였습니다. 공급은 처음부터 두꺼웠습니다. 그래서 공급 수치는 전수에서만 읽고, 목록의 totalItemCount 대비 수집률이 98% 미만인 칸은 어떤 판정에도 쓰지 않는 가드를 분석 입력 앞에 달았습니다.

나이를 맞춰 비교하면 랜딩페이지는 왜 밀렸나

전수로 바꾸자 새 문제가 생겼습니다. 오래된 gig은 쌓인 시간만큼 팔리니, 칸끼리 비교하려면 등록 시기를 맞춰야 합니다. 그래서 gigId가 같은 띠에 있는 gig끼리, 즉 비슷한 시기에 올라온 신규 gig만 비교하는 신규 진입 창을 만들었습니다.

지표는 그 띠 안에서 판매가 한 건이라도 발생한 gig의 비율입니다. 랜딩페이지는 14.3%였고, 나머지 네 칸은 모두 이보다 높았습니다.

신규 진입 창에서 칸별 판매 발생 비율. 랜딩 14.3%, 아임웹 22.6%, 워드프레스 23.1%, 수익 자동화 30.6%, 완성형 31.9%
같은 시기 신규 gig끼리 비교하면 랜딩이 가장 낮았다

수익 자동화 30.6%는 랜딩 대비 p=0.0003, 완성형 31.9%는 p=0.0005로 유의했습니다. 워드프레스 23.1%와 아임웹 22.6%도 랜딩보다 높았습니다. 이때 내린 결론은 진입 장벽이 리뷰가 아니라 칸이라는 주장이었고, 근거로 띠에서 실제로 판 gig의 리뷰 중앙값이 2~3건이라는 점을 들었습니다.

이 결론은 바로 다음 검토에서 반증됐습니다. 근거로 든 문장에 문제가 있었기 때문입니다.

순환논증은 어떻게 세 번이나 들어왔는가

세 번의 순환논증은 모두 같은 구조였습니다. 판매의 결과인 변수를 판매의 원인처럼 비교에 넣었습니다. 하나씩 적습니다.

첫 번째는 리뷰였습니다. 띠에서 판 gig의 리뷰 중앙값이 2~3건이니 리뷰 벽이 없다고 읽었는데, 리뷰는 구매 뒤에 달립니다. 판 gig이 리뷰를 갖는 건 당연합니다. 실측하면 띠 랜딩 gig 244개 중 리뷰 0이 209개였고, 그중 판매가 있는 gig은 0건이었습니다. 리뷰 0과 판매 0은 같은 집합이었고, 남는 주장은 0에서 1로 넘어가는 문턱을 넘은 비율 하나뿐이었습니다.

두 번째는 등급이었습니다. 나이만 통제한 비교에 판매자 이력이라는 교란이 남아 있어서, 판매자 등급으로 나눠 다시 쟀습니다. 띠 안에서 등급이 NEW인 판매자의 판매 비율은 15.1%, NEW가 아닌 판매자는 43.4%로 2.9배였습니다. 칸 효과는 2.1배였으니 판매자 효과가 더 크다고 결론 냈습니다.

그런데 등급은 과거 판매가 쌓여 오르는 값입니다. 팔아서 등급이 올랐는데, 등급이 높아서 판다고 읽은 셈입니다. 판매와 독립인 시간 변수, 즉 판매자가 이 띠에 처음 등장했는가로 다시 재자 17.9% 대 22.5%, 1.25배였습니다(Mantel-Haenszel 검정 p=5.3e-05). 같은 조건에서 칸 효과는 2.2배라서 이번에는 칸이 더 컸습니다.

효과 크기 비교. 등급으로 잰 판매자 효과 2.9배, 시간 변수로 다시 잰 판매자 효과 1.25배, 칸 효과 2.2배
등급으로 잰 2.9배는 순환이었고 시간 변수로는 1.25배였다

세 번째는 이 분석 안에서 같은 계열이 반복됐다는 사실 자체입니다. 리뷰와 등급 두 번을 잡고 나서 원칙을 하나 세웠습니다. 비교에 쓰는 변수가 결과의 함수인지 먼저 묻는다는 원칙입니다. 결과보다 시간상 앞선 값이어야 원인 후보가 됩니다.

비슷한 반전이 하나 더 있었습니다. 등급이 관문이 아니라는 주장은 상위 10명만 본 생존 편향이었고, 세금계산서 발행이 유일한 우위라는 주장은 판매 gig의 53%가 이미 세금계산서를 갖고 있어서 철회했습니다. 두 주장 모두 성공한 표본만 보고 만든 결론이었습니다.

검정 코드에서 나온 버그 세 건은 무엇이었나

두 번째 적대 검증에서 데이터층이 치명 지적 5건을 냈고, 그중 셋이 검정 코드의 버그였습니다. 여기서 적대 검증은, 분석을 만든 쪽과 별개로 결과를 부수려고 하는 검토를 뜻합니다. 세 건 모두 결론을 바꿨습니다. 코드는 돌아갔고 숫자도 그럴듯하게 나왔기 때문에, 밖에서 공격하기 전에는 아무도 이상을 느끼지 못했습니다.

  • 판매자 첫 등장을 IT·마케팅 대분류 안에서만 잡았습니다. 다른 대분류에서 이미 팔던 기존 판매자 297명(4.3%)이 신규로 분류됐습니다. 전 대분류로 고치자 수익 자동화의 p값이 0.027에서 0.144로 올라 유의성이 사라졌습니다.
  • 다중비교 보정(BH, Benjamini-Hochberg)을 판정 통계량과 다른 계열에 걸었습니다. 판정은 신규 판매자 비교로 하는데 보정은 띠 전체 검정에 걸려 있어서, 보정을 통과했다는 표시가 거짓이었습니다. 신규 계열에 따로 걸었습니다.
  • MH 층 격자를 비교할 때마다 다시 뽑았습니다. 그래서 칸마다 서로 다른 격자로 검정한 셈이었고, 띠 전체에서 격자를 한 번만 정해 고정했습니다.

여기서 MH는 시기 같은 교란 변수의 층별로 비교해 하나로 합치는 검정입니다. 격자가 칸마다 달랐다는 말은 자로 잴 때마다 눈금을 새로 긋는다는 뜻입니다. 칸끼리 비교한 값이 서로 다른 자로 잰 값이었습니다.

칸이 90개라서 다중비교 보정도 필수였습니다. 90번 검정하면 우연으로 유의해 보이는 칸이 생기기 때문입니다. 표에만 적혀 있던 p값을 누구나 재현할 수 있도록 검정값을 파일로 남기는 스크립트(entry_tests.py)도 이때 만들었습니다.

조치: 통제를 세 겹으로 늘리자 후보는 몇 칸 남았나

나이, 판매자 이력, 다중비교라는 세 겹의 통제를 순서대로 얹으면서 후보를 세었습니다. 통제를 하나 더할 때마다 후보가 줄었고, 마지막에는 0이 됐습니다.

통제를 더할수록 남는 진입 후보 칸
통제남은 칸비고
없음(Fisher 검정)4랜딩보다 유의하게 높은 칸
+ gig 나이(gigId 층 MH)2워드프레스 p=0.105, 아임웹 p=0.185 탈락
+ 판매자 이력(전 대분류 첫 등장)1수익 자동화 p가 0.027에서 0.144로
+ 다중성(BH q=0.05, 신규 계열)0완성형 p=0.028이 임계 미달
통제 단계별 남은 진입 후보 칸 수. 통제 없음 4칸, 나이 통제 2칸, 판매자 이력 통제 1칸, 다중성 통제 0칸
통제를 세 겹 쌓으니 후보 4칸이 0칸이 됐다

기준선을 넘는 칸은 인스타그램 관리(37.6%)와 바이럴·포스팅(34.2%) 둘뿐이었는데, 둘 다 리워드와 계정을 파는 칸이라 우리가 팔 수 없습니다. 그래서 결론은 랜딩페이지보다 유의하게 나은 우리가 팔 수 있는 칸이 0개라는 결론으로 확정됐습니다.

중간에 1칸까지 줄었던 수익 자동화에는 별도 판단이 붙었습니다. 그 칸은 동종 이해상충 문제로 이미 기각해 둔 축이었습니다. 법률 자체가 막는 건 아니었습니다. 자본시장법을 조문까지 조회하니 고객이 지정한 조건을 코드로 옮기는 일은 투자자문업, 투자일임업, 유사투자자문업 어디에도 들어가지 않았습니다. 넘어가는 순간은 조건 선택, 계좌 운용, 신호 송출 셋뿐이고 처벌은 각각 징역 3년·벌금 1억 원, 징역 1년·벌금 3천만 원입니다. 그래도 gig 원문 초안은 보류로 돌렸습니다.

재측정 결과는 어떻게 나왔나: 칸이 아니라 gig 수가 답이었다

칸이 답이 아니라면 무엇이 판매를 가르는지 같은 데이터로 다시 물었습니다. 우리 조건과 같은 코호트, 즉 신규 gig 띠에 있으면서 전 대분류 기준으로 처음 등장한 판매자의 gig 6,570개가 실제로 가져간 돈을 칸별로 세었습니다.

우리 조건 코호트의 칸별 판매율과 금액
칸코호트 gig판매율gig당(만 원)판 gig당(만 원)
앱21111.4%30.9272.0
아임웹15819.0%28.8151.5
홈페이지 신규 제작80210.3%14.2137.3
랜딩페이지(기준)18813.8%13.597.3
워드프레스8922.5%18.079.9
수익 자동화7123.9%15.765.5
완성형 프로그램 스토어5729.8%18.160.7
언론홍보3036.7%16.545.0

판매 확률이 높은 칸일수록 건당 금액이 작았습니다. 랜딩페이지는 판매율과 금액 모두 중간이고 판 gig당 금액은 97.3만 원으로 상위권이라, 이 칸을 유지하는 근거가 매몰비용만은 아닙니다.

다음으로 같은 코호트를 판매자가 깐 gig 수로 나눴습니다. 여기서 가장 큰 차이가 나왔습니다.

판매자가 깐 gig 수별 판매율
깐 gig 수판매자gig당 판매율판매자당 최소 1건
1개3,92215.7%15.7%
2개51021.6%35.9%
3개19122.0%41.4%
4개8122.8%46.9%
5개 이상9516.3%52.6%
판매자가 깐 gig 수별로 최소 1건을 판 판매자 비율. 1개 15.7%, 2개 35.9%, 3개 41.4%, 4개 46.9%, 5개 이상 52.6%
gig 1개만 깐 판매자의 84%는 한 건도 못 팔았다

gig을 1개만 깔면 판매자의 84%가 아무것도 팔지 못했습니다. 2~4개 구간에서는 gig당 판매율이 떨어지지 않았고(21.6%에서 22.8%), 그러니 나눠 먹기 효과가 아닙니다. 5개 이상에서는 gig당 판매율이 16.3%로 꺾였습니다. 양산이 효율을 떨어뜨리는 지점으로 읽힙니다.

이 결과가 처음 결론과 어긋난 부분을 남깁니다. 처음에는 랜딩페이지 1종 유지를 결론으로 적었습니다. 그런데 이 표는 gig 1개가 84% 무판매 구간이라고 말하고 있었고, 랜딩보다 유의하게 나은 칸이 없다는 문장을 다른 칸은 올리지 않는다는 뜻으로 잘못 옮겼습니다. 제외해야 하는 건 치명 결함이 있는 칸뿐이었습니다. 자동매매, 상세페이지, 리워드·계정·크롤링만 뺐습니다.

그래서 gig 4개를 등록했습니다. 업무 자동화, 상담봇, 기업 홈페이지, 랜딩페이지입니다. 모두 승인 대기(영업일 7일) 상태이고, 등록 이후 14일 동안의 노출과 문의 수로 다시 판정합니다. 같은 문제를 다룬 다른 분석은 콘텐츠 노출이 거꾸로 떨어진 원인 분석에 있습니다.

남는 한계는 무엇인가

이 결론은 아직 판매로 검증되지 않았습니다. 통계는 지금까지 팔린 gig의 기록이지, 우리 gig이 팔린다는 약속이 아닙니다. gig 4개는 승인 대기라 실제 판매 데이터가 한 건도 없고, 아래 한계를 안고 있습니다.

  • 역인과를 배제하지 못했습니다. 잘 파는 판매자가 gig을 더 깔았을 수 있습니다. 다만 그 설명만으로는 5개 이상에서 판매율이 꺾이는 현상이 나오지 않습니다.
  • 완성형 프로그램 스토어(판매율 29.8%, p=0.028)는 다중성 임계만 넘지 못했습니다. 판매 흐름 데이터를 쌓아 다시 판정합니다.
  • 유튜브 관리(36.1%, p=0.0025)는 계정 위임 축이라 후보에서 뺐습니다. 계정 위임의 약관 검토를 유튜브로 넓히면 후보로 돌아옵니다.
  • 가격과 패키지는 정하지 못했습니다. 9월 18일 회차 실측은 목록 37,118건, 상세 13,563건, 판매가 발생한 gig 249개, 판매 487건, 거래액 2,249만 원을 62분에 모았습니다. 이 흐름 데이터를 2주 적재한 10월 1일 이후에 가격대를 다시 제안합니다.
  • 판매 확률이 높은 칸은 건당 금액이 작습니다. 어느 칸이 낫다는 결론은 확률과 금액을 함께 보는 한 내지 못합니다.

정리하면 이 분석에서 얻은 교훈은 세 가지입니다. 표본의 공급 수는 전수에서만 읽고, 비교 변수는 결과보다 앞선 시간 값인지 확인하고, 검정 코드는 결과가 좋아 보일 때 가장 먼저 의심합니다. 이 분석에서 결과를 바꾼 버그 셋은 통계 이론이 아니라 코드의 집계 범위와 격자 설정이었습니다. 검정 이론을 몰라서 틀린 게 아니라 어느 집합에서 세는지, 어느 격자로 자르는지 같은 집계 조건을 놓쳐서 틀렸습니다. 그래서 다음 분석부터는 검정값을 파일로 남기고, 결론을 내기 전에 다른 사람이 코드를 공격하게 합니다.

같은 방식으로 우리 업무를 재보고 싶다면

이 글에 쓴 계측·판정·자동화는 저희가 실제로 매일 돌리는 방식 그대로입니다. 어떤 작업을 자동화할 수 있고 어디를 사람이 잡아야 하는지, 현재 업무 흐름을 놓고 같이 짚어 드립니다.

새 글이 올라오면 알려 드립니다

이런 계측 기록을 새로 쓰면 메일로 한 통 보냅니다. 광고나 판촉은 보내지 않습니다.