본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

합성 지표는 제일 늙은 다리 이름을 댄다

~12 min · composite, aggregation, as-of, honesty

Level 0원석
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"합성 지표는 자기 as_of 를 말하고, 제일 오래된 입력 이름을 대고, 그 밑에서 제일 좁은 창을 보고한다."

집계가 파괴하는 것

합성 지표는 지표 여덟 개를 받아서 각각 점수 매기고, 세 범주 안에서 평균 내고, 범주에 가중치를 걸고, 숫자 하나를 돌려줘. 집계는 압축이고 압축은 버려. 질문은 항상 뭘 버리냐고, 여기서는 어마어마하게 중요한 둘이야.

날짜의 벌어짐을 버려. 어떤 다리는 분기 통계 발표에서 오고 정당하게 몇 달 묵을 수 있어. 다른 하나는 어젯밤에 갱신된 일간 계열이고. 같이 평균 내면 출력에는 자기 날짜가 없고 — 그 옆에 어떤 날짜를 찍든 입력 대부분한테는 틀려.

창의 벌어짐을 버려. 구성원이 3 년, 41 년, 한 세기 반에 대고 측정된 합성 지표는 제일 짧은 자만큼만 측정된 거야. 근데 합성 지표는 0 에서 100 사이 숫자 하나고, 숫자 하나는 뭐가 들어갔든 똑같이 단단해 보여.

그걸 되돌려놓는 필드 셋

벌어짐을 숨기는 대신 반환값이 그걸 이름 대. 기준 시각은 제일 새 기여 값이라, 독자가 이 섞임 속에서 제일 신선한 게 뭔지 알아. 제일 오래된 입력은 날짜까지 붙여서 이름이 나와서, 뒤처진 놈을 이름으로 볼 수 있어. 몇 달 뒤처진 분기 다리가 평균에 뭉개지는 대신 호명되는 거지. 제일 좁은 창은 구성원 중 누가 대본 제일 짧은 자야. 합성 지표가 역사에 딛고 섰다는 주장은 제일 덜 딛고 선 구성원한테 상한이 걸리니까.

독스트링이 외울 값어치 있는 한 절로 정리해. 합성 지표는 딱 그만큼만 측정된 거다.

집계값은 평균 입력이 아니라 자기 제일 약한 입력을 보고해야 해. 평균은 가운데를 설명하고, 신뢰는 꼬리가 지배해. 측정 여럿을 하나로 압축할 때는 최악 기여자의 성질을 앞으로 실어. 제일 오래된 것, 제일 짧은 것, 제일 추정에 가까운 것. 그게 실제로 이 집계값이 주장할 수 있는 것의 경계니까.

시장 둘을 밖에 두기로 한 결정

같은 모듈에 정직함에 대한 두 번째 결정이 있고, 그쪽이 더 재밌어. 한국이랑 일본 값은 나머지랑 똑같은 공개 척도로 점수가 매겨지고, 일부러 합성 지표 바깥에 있어. 맥락 카드로 나오지.

적힌 이유가 정밀해. 합성 지표는 미국 시장을 자기 역사에 대고 성격 규정하는 건데, 거기 한국을 접어 넣으면 그게 답하는 질문이 조용히 바뀐다는 거야. 숫자는 여전히 계산돼. 여전히 합성 지표처럼 보이고. 근데 조용히 다른 측정이 돼버려. 이름도 없고, 자기 기준 역사도 없고, 독자가 그 바꿔치기를 알아챌 방법도 없는 세 시장의 어떤 혼합.

이 트랙 전체에서 제일 미묘한 실패 모드야. 이름을 유지한 채로 뜻이 바뀌는 숫자는 틀린 숫자보다 나빠. 틀린 숫자는 확인해서 잡을 수 있는데, 재정의된 숫자는 확인해도 완벽하게 통과하거든.

나였으면 접어 넣었을 거야
입력이 많으면 더 엄밀해 보이고, "합성 지표가 세 시장을 다 다룬다" 가 "하나를 다루고 나머지는 옆에 앉아 있다" 보다 나은 문장이잖아. 그 나은 문장이 더 나쁜 도구를 설명한다는 걸 보려면 이유를 읽어야 했어. 합성 지표는 이 시장이 자기 역사에 대고 어디 있나에 답해. 그리고 그 질문에 시장 셋이 들어간 판본은 존재하지 않아. 둘을 밖에 둔 건 미안해할 한계가 아니라, 질문이 계속 물을 수 있는 것으로 남는 유일한 방법이었어.

Code

합성 지표의 정직함 필드, 숫자 옆에 같이 반환·python
def assay(rows=None) -> dict[str, Any]:
    """The whole model over the current gauge readings.

    Carries its own honesty alongside the number: `as_of` is the
    newest contributing reading, `oldest_input` names the laggard
    (the Buffett leg is quarterly and can be months behind), and
    `narrowest_window` is the shortest ruler any member was
    measured against -- a composite is only as measured as that."""
    ...
    dated = sorted(scored, key=lambda s: s["data_date"])
    windows = [s["window_years"] for s in scored
               if s["window_years"] is not None]
    return {
        "composite": composite,
        "regime": regime(composite),          # a phrase, never a call
        "as_of": dated[-1]["data_date"],      # the freshest leg
        "oldest_input": {"name": dated[0]["name"],
                         "data_date": dated[0]["data_date"]},
        "narrowest_window": min(windows),     # the shortest ruler
        "reference_scored": [s["key"] for s in scored
                             if s["reference"]],  # assumed, not measured
        "formula": "category = mean(member scores); composite ="
                   " sum(category x weight) x 10 -- valuation 40 /"
                   " risk pricing 30 / liquidity 30",
    }

External links

Exercise

네 시스템의 합성 점수나 건강 지수나 롤업 지표를 하나 골라서, 입력마다 나이랑 역사 길이를 적어봐. 그다음 화면이 그 지표 타임스탬프로 뭘 찍는지 확인해. 날짜 하나를 찍으면, 그 날짜가 어느 입력 거고 나머지가 의미 있게 더 오래됐는지 알아봐. 그다음 뭘 이름 댈지 정해. 제일 새 거, 제일 오래된 거, 아니면 둘 다.
Hint
확실한 냄새는 입력들이 서로 다른 일정으로 갱신되는 롤업이야. 실시간 신호랑 주간이나 분기 신호가 섞인 거면 뭐든. 롤업은 살아 있어 보여. 빠른 입력이 계속 흔드니까. 그동안 느린 입력이 조용히 그걸 지난 분기에 붙들어 매고 있고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 피파— warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.