모집단은 회사의 집합이다. 데이터는 상장의 집합으로 온다. 서로 다른 집합이고, 그 차이는 겉모양이 아니다.
버그, 사실은 모델링 오류
집중도는 제일 큰 열 개 회사가 시장의 얼마를 차지하냐를 물어. 입력은 상장이야. 거래되는 증권마다 행 하나. 그리고 어떤 회사는 상장이 하나가 아니야. 주식 종류가 둘인 회사는 종목 코드 둘로 거래돼.
여기 물리게 만드는 사실을 더해봐. 제공자가 돌려주는 주식 수가 종류 조정된 값이야. 상장마다 가중 주식 수가 이미 회사 전체를 계산에 넣고 있어. 그래서 이중 종류 회사의 종목 둘이 각각 독립적으로 회사 전체를 값 매기고, 둘 다 두면 한 회사가 상위 열 개에 두 번 들어가. 두 번 다 전체 크기로.
작은 왜곡이 아니야. 분자를 부풀리고, 분모를 잘못 말하고, 진짜 10 위 회사를 목록 밖으로 밀어내. 그것도 좁은 의미로는 완전히 맞는 집합에서. 모든 행이 진짜였어. 모든 값이 맞았고. 그 집합이 그냥 물어본 것과 다른 질문에 답하고 있었을 뿐이야.
정체성 고르기
종목 코드는 있고, 유일하고, 틀렸어. 상장을 식별하니까. 회사 이름은 소스랑 표기에 따라 달라지는 문자열이고. 맞는 키는 규제 공시 식별자야. 공시 주체마다 발급되는 번호고, 이 도메인에서 "회사" 가 갖는 정체성이 정확히 그거거든.
구현에서 훔쳐갈 만한 게 둘 있어.
폴백이 공유가 아니라 행별이야. 공시 식별자가 없는 상장은 빈 문자열이 아니라 자기 종목 코드로 폴백해. 보이는 것보다 중요해. 빈 문자열 폴백이었으면 식별자 없는 상장 전부가 유령 회사 하나로 접혔을 거고, 그건 지금 고치는 버그보다 훨씬 나쁜 버그야.
접을 때 최댓값을 잡지 절대 합을 안 잡아. 상장마다 이미 회사 전체를 값 매기니까 더하면 두 배가 돼. 그래서 상장 하나가 대표가 되고 나머지는 버려져. 코드에 그거에 대한 주석이 달려 있어. 다음에 읽는 사람이 왜 합을 안 잡는지 반드시 궁금해할 테니까.
근데 그 주석은 천천히 읽어. 이 레슨을 처음 쓸 때, 주석이랑 코드가 안 맞았거든. 주석은 더 유동성 높은 상장을 남긴다고 했고, 코드는 계산된 시총이 더 큰 쪽을 남겼어. 거래대금은 애초에 어떤 상장이 후보 풀에 들어오냐만 정했지 여기서는 아무 역할도 안 했고. 이중 종류 회사면 보통 둘이 일치해서, 그래서 이 불일치가 3 주를 살아남았어. 대부분의 경우 맞는 주석이 틀렸다는 걸 알아채기 제일 어려워.
2026-08-31 에 주석 쪽을 고쳤어. 코드가 아니라. 어느 쪽을 고치느냐가 이 레슨에서 제일 값나가는 판단이야.
코드가 맞았거든. 이중 종류 회사에서 대표를 고를 때 시총이 큰 쪽을 잡는 건 타당해. 어차피 상장마다 회사 전체를 값 매기니까 둘 중 뭘 잡아도 같은 회사고, 큰 쪽이 보통 유동성도 크고, 무엇보다 이미 들고 있는 숫자 야. 주석대로 진짜 유동성 비교로 바꾸려면 거래대금을 이 단계까지 끌고 내려와야 하는데, 그건 안 물어본 동작 변경이고 순위를 실제로 움직여. 라벨이 코드보다 앞서갔을 때 기본값은 라벨을 내리는 거지 코드를 라벨까지 올리는 게 아니야. 반대로 하면 문서를 근거로 동작을 바꾸는 셈인데, 그 문서는 방금 틀렸다고 판명난 그거잖아.