LabHub
배우기 러닝패스 코스

디버깅 실전 · 되는 것과 안 되는 것의 차이표 · 실습

되는 고객과 안 되는 고객 — 차이표로 후보를 지운다

LabHub 에서 이어서 보기

목표

성공 표본과 실패 표본을 속성별로 갈라 차이표를 만들고, 모든 실패에 있고 어떤 성공에도 없는 값만 후보로 남긴다. 완벽하게 상관하는 가짜 후보를 새 표본과 개입 실험으로 각각 떨어뜨리고, 한 속성으로는 갈리지 않는 상호작용까지 찾아낸다.

왜 중요한가

"어떤 고객은 되고 어떤 고객은 안 됩니다" 는 나쁜 소식처럼 들리지만 사실은 좋은 소식이다. 되는 쪽이 있다는 것은 대조군이 있다는 뜻이다. 실패 로그만 파면 모든 줄이 수상해 보이지만, 성공 로그에도 같은 줄이 있으면 그것은 원인이 아니라 배경이다.
이 실습에서 어려운 것은 표를 만드는 코드가 아니라 후보가 둘 남았을 때 무엇을 하는가다. 같은 날 배포된 두 가지가 언제나 함께 다니면 표본만으로는 구별할 수 없다. 이때 그럴듯한 쪽을 골라 보고하면 절반의 확률로 며칠을 버린다.
가르는 길은 둘뿐이다. 둘이 갈라지는 표본을 더 얻거나, 속성 하나만 바꾸고 나머지를 고정해 결과가 뒤집히는지 보는 것이다. 앞은 관찰이고 뒤는 실험이며, 인과를 말할 수 있는 것은 실험뿐이다.
채점기는 여러분의 결론을 믿지 않는다. 채점기가 원인과 가짜 후보를 매번 다른 자리에 심은 표본을 만들어 여러분의 도구를 실제로 실행하고, 골라낸 후보 집합을 심어 둔 답과 대조한다.

단계

1. /root/diff/gen_cases.py 를 만들어 실행해 /root/diff/cases.json(240건), cases2.json(120건), cases3.json(180건), repro.py 를 만드세요.
2. /root/diff/table.json 에 속성별 값마다 실패 건수와 성공 건수를 적은 차이표를 만드세요.
3. /root/diff/differential.py 를 만들어 모든 실패에 있고 어떤 성공에도 없는 값을 후보로 고르게 하세요.
4. /root/diff/candidates.json 에 후보 목록과 지운 후보를 근거와 함께 적으세요.
5. 새 표본을 합쳐 다시 돌리고 /root/diff/verdict.json 에 살아남은 원인 하나와 떨어진 후보, 그 근거가 된 표본 번호를 적으세요.
6. differential.py 에 짝 분석을 붙이고 /root/diff/pairs.json 에 cases3.json 의 짝 후보를 적으세요.
7. repro.py 로 속성 하나만 바꿔 결과가 뒤집히는지 확인하고 /root/diff/confirm.json 에 적으세요.
8. /root/diff/summary.json/root/diff/diff_report.md 에 네 절로 보고하세요.

참고

단계 8개

  1. 표본과 재현기 손에 쥐기
  2. 속성별 차이표 만들기
  3. 후보를 고르는 도구 만들기
  4. 후보와 지운 후보를 근거와 함께 적기
  5. 새 표본으로 가짜 후보 떨어뜨리기
  6. 한 속성으로 갈리지 않는 경우
  7. 속성 하나만 바꿔 뒤집히는지 보기
  8. 지운 것까지 한 장으로 보고하기