sgkstudio.
엔지니어링

임계값 조정 오탐 폭발: 재현율 상한 40%에 매매 차단 +417%

임계값 조정 오탐은 재현율보다 훨씬 빨리 늘어나므로, 놓친 사건을 잡겠다고 임계값부터 낮추면 손해를 봅니다. 주식 자동매매 시스템의 PANIC 임계값을 -0.60에서 -0.35까지 완화해 시뮬레이션하니 재현율은 20%에서 40%가 상한이었고, 매매 차단은 최대 +417%까지 늘었습니다. 이 글은 재현율 표와 오탐 비용표를 나란히 놓고 판정한 과정과, 임계값 대신 손대야 할 곳을 적습니다.

2026-11-02측정 방법: simulate_thresholds.py 로 PANIC 임계값 -0.60 대비 완화 4개 구간을 시뮬레이션(2026년 5월 27일)오탐 비용: -0.50 2.7%·33일(+38%) / -0.45 4.4%·54일(+125%) / -0.40 7.2%·88일(+267%) / -0.35 10.1%·124일(+417%)재현율: 20%에서 40%가 상한, 모든 완화 구간 공통. 판정: 재현율 +20% 대 매매 차단 +267~417%, ROI 음수대안: 가중치 격자 탐색(KOSDAQ 지수·breadth·vol 가중치 상향) 또는 하위 점수 실측 재구성(종목 순회)24일(-0.60 추정)·구간별 증가 일수·모수 1,222~1,228일은 위 수치에서 계산한 값한계: 기록의 일수에 붙은 연간 표기가 오탐 비율과 맞지 않아 연간 수치로 읽지 않음. 대안의 재측정 수치는 근거 기록에 없음

무엇이 문제였나: 놓치는 사건과 막히는 거래일

임계값 조정 오탐 문제는 한 문장으로 줄일 수 있습니다. 임계값을 느슨하게 하면 놓치던 사건을 더 잡을 수 있지만, 평범한 날도 같이 걸립니다. 저희 자동매매 시스템에서 이 대가를 재 보니 재현율은 잘해야 20%에서 40%로 오르는데, 막히는 날은 -0.60 대비 최대 +417%까지 늘었습니다. 그래서 임계값을 옮기는 안을 버리고 점수 쪽으로 눈을 돌렸습니다.

저희 시스템의 PANIC 판정은 구조가 단순합니다. 시장 상태를 종합 점수 하나로 계산하고, 그 점수가 임계값 -0.60 아래로 내려가면 공황 상태로 보고 매매를 막습니다. 값이 음수라서 말이 헷갈릴 수 있는데, 이 글에서 완화는 임계값을 -0.60에서 -0.50, -0.45처럼 0에 가깝게 옮겨 판정을 덜 엄격하게 만드는 일을 뜻합니다.

이런 장치가 실패하는 방향은 둘입니다. 위험한 날을 놓치면 재현율이 낮아지고, 멀쩡한 날을 위험하다고 판정하면 오탐이 늘어납니다. 두 실패의 비용은 성격이 다릅니다. 놓친 사건은 드물지만 눈에 잘 띄고, 오탐으로 막힌 날은 한 번의 손해가 작아 보여도 조용히 쌓입니다. 자동매매에서 매매가 막힌 날은 아무 경고도 남기지 않습니다. 그날 벌 수 있었던 기회가 사라질 뿐입니다.

문제는 사람이 눈에 띄는 쪽만 보기 쉽다는 데 있습니다. 놓친 사건 하나를 앞에 두면 임계값을 조금 낮추자는 제안이 가장 먼저 나옵니다. 숫자 하나만 바꾸면 되니 비용도 없어 보입니다. 하지만 그 숫자 하나가 평범한 날 전체에 적용된다는 사실은 재현율 표에 나타나지 않습니다. 그래서 이번 검토에서는 완화가 재현율을 얼마나 올리는지와 함께, 막히는 날을 얼마나 늘리는지를 같은 자리에서 재기로 했습니다.

처음 잰 숫자: 재현율 20%, 비교 기준은 임계값 -0.60

출발점은 현재 임계값 -0.60과 재현율 20%였습니다. 잡아야 할 사건 다섯 건 중 한 건꼴로만 울린다는 뜻이니, 개선하고 싶은 욕구가 생기는 숫자입니다. 그리고 비교할 후보로 -0.50, -0.45, -0.40, -0.35 네 값을 골랐습니다.

통계 카드 3장. 현재 PANIC 임계값 -0.60, 현재 재현율 20%, 완화 시 재현율 상한 40%
재현율만 보면 완화할 이유가 충분해 보이는 출발점

측정은 `simulate_thresholds.py` 라는 시뮬레이션 스크립트로 했습니다. 실매매에서 임계값을 바꿔 보는 방식은 쓰지 않았습니다. 과거 점수를 그대로 둔 채 임계값만 후보값으로 바꿔 적용하고, 후보마다 두 값을 셉니다. 하나는 오탐 비율과 일수, 다른 하나는 재현율입니다. 점수 이력이 같으니 두 값의 차이는 온전히 임계값에서 나옵니다.

오탐을 일수로도 적은 데에는 이유가 있습니다. 10.1%라는 비율만 보면 작은 값처럼 읽히지만, 거래일로 바꾸면 열흘에 하루꼴로 시스템이 스스로 매매를 멈춘다는 뜻입니다. 비율은 후보끼리 비교하기 좋고, 일수는 그 결정을 운영하는 사람이 실제로 겪을 일을 보여 줍니다. 그래서 표에는 둘 다 넣었습니다.

이 방식의 장점은 후보를 돈 잃지 않고 비교할 수 있다는 데 있습니다. 임계값을 실제로 옮겨 놓고 몇 달을 기다리면 평범한 날의 비용은 확인할 수 있어도, 드문 사건은 그 기간에 오지 않을 수 있습니다. 과거 이력에 적용하면 후보 네 개를 같은 기간, 같은 날들 위에서 한 번에 비교할 수 있습니다.

이 글의 수치는 전부 2026년 5월 27일에 남긴 시뮬레이션 기록에서 왔습니다. 계산으로 얻은 값은 본문에서 계산했다고 따로 밝힙니다. 기록에 없는 값은 추정해 채우지 않고, 없다고 적습니다.

어떤 가설을 세웠나?

검토할 가설은 이렇습니다. “임계값을 -0.60에서 조금씩 완화하면 재현율이 의미 있게 오르고, 늘어나는 오탐은 감당할 만하다.” 이 가설이 맞다면 가장 값싼 해결책이 손 안에 있는 셈입니다. 코드 한 줄이면 끝나고, 계산 비용도 추가로 들지 않습니다.

가설이 맞으려면 두 조건이 함께 성립해야 합니다. 첫째, 재현율이 완화 폭에 맞춰 계속 올라야 합니다. 둘째, 오탐이 재현율보다 느리게 늘어야 합니다. 둘 중 하나만 무너져도 이 안은 좋은 거래가 아닙니다. 그래서 판정 기준을 재현율 하나로 두지 않고, 재현율 상승분과 매매 차단 증가분의 비교로 잡았습니다.

이 판정을 수익률 같은 말로 부르면 투자 대비 효과(ROI)입니다. 재현율을 얼마 얻고 거래일을 얼마 내주는가를 한 줄로 묶어 계산합니다. 재현율 표와 오탐 표를 따로 보면 두 숫자가 서로 만나지 못합니다. 한쪽은 좋아졌다고 말하고 다른 쪽은 나빠졌다고 말하는데, 어느 쪽이 더 큰지는 아무도 답하지 않는 상태가 됩니다.

가설이 틀렸다면 표에 나타날 모양도 미리 생각할 수 있습니다. 재현율이 어느 지점에서 멈추거나, 오탐이 재현율보다 가파르게 늘어나는 모양입니다. 둘 중 하나라도 보이면 임계값을 조금 더 다듬는 일로는 풀리지 않는다는 뜻입니다.

가설은 어디서 틀렸나?

오탐 쪽 결과부터 보면 가설은 금방 무너졌습니다. 아래 표는 임계값별 오탐 비율, 오탐 일수, 그리고 -0.60과 비교한 증가율입니다.

임계값 완화 구간별 오탐 비용
PANIC 임계값오탐 비율오탐 일수-0.60 대비 증가
-0.502.7%33일+38%
-0.454.4%54일+125%
-0.407.2%88일+267%
-0.3510.1%124일+417%

재현율 상한은 모든 완화 구간에서 40%로 같다.

막대 그래프. 임계값별 오탐 일수. -0.50 33일, -0.45 54일, -0.40 88일, -0.35 124일
임계값이 0에 가까워질수록 막대가 빠르게 길어진다

첫 번째 조건인 재현율부터 틀렸습니다. 완화 구간 전체에서 재현율 상승의 상한은 40%였습니다. 임계값을 어디까지 옮겨도 그 위로는 올라가지 못합니다. 재현율을 끝없이 끌어올릴 수 있다는 기대가 깨진 셈입니다.

두 번째 조건도 틀렸습니다. 오탐은 재현율보다 느리게 늘지 않았고, 훨씬 빠르게 늘었습니다. 표의 증가율은 +38%, +125%, +267%, +417%로 뛰고, 이 네 값은 하나의 기준을 가리킵니다. 33일을 1.38로, 54일을 2.25로, 88일을 3.67로, 124일을 5.17로 나누면 네 경우 모두 약 24일이 나옵니다. 즉 -0.60의 오탐은 약 24일로 계산할 수 있고, -0.35에서는 그 다섯 배가 넘습니다.

구간별로 보면 더 뚜렷합니다. 임계값 간격이 똑같이 0.05인 세 구간에서 추가로 막히는 날을 계산하면 21일, 34일, 36일입니다. 간격은 같은데 추가 비용이 커집니다. 임계값이 평범한 날의 점수가 몰린 자리로 다가갈수록 한 칸마다 더 많은 날이 걸린다는 신호로 읽을 수 있습니다.

막대 그래프. 임계값을 0.05씩 옮길 때 추가로 막히는 날. -0.50에서 -0.45로 21일, -0.45에서 -0.40으로 34일, -0.40에서 -0.35로 36일
같은 간격을 옮겨도 뒤로 갈수록 비용이 커진다

ROI 판정은 음수로 나왔습니다. 재현율은 20%포인트 오르는 데 그치는데, 매매 차단은 -0.40과 -0.35 구간에서 +267%에서 +417%로 늘어납니다. 가장 좋게 계산해 -0.35에서 재현율 상한 40%를 얻는다고 가정해도, 약 100일을 더 막고 20%포인트를 얻는 거래입니다. 재현율 1%포인트에 거래일 5일을 내주는 셈이고, 이 계산은 완화의 효과를 가장 후하게 잡은 값입니다.

-0.50처럼 가장 싸 보이는 구간은 어떨까요? +38%는 네 구간 중 가장 작습니다. 다만 이 글의 근거 기록은 재현율을 구간별로 나누지 않고 상한만 남겼기 때문에, 구간마다 ROI를 따로 계산할 수는 없습니다. 기록의 판정은 완화라는 방법 전체를 향합니다. 임계값을 옮기는 방법으로는 40% 위로 갈 수 없고, 그 상한에 가까워질수록 비용이 커진다는 판단입니다.

여기서 틀린 것은 임계값 후보 하나가 아니라 질문입니다. “얼마나 낮출까”를 묻는 동안에는 낮추는 일 자체가 맞는 수단인지 따지지 않게 됩니다. 네 구간을 모두 재고 나서야 그 전제를 의심할 근거가 생겼습니다.

진짜 원인은 무엇인가?

원인은 임계값이 하는 일의 범위에 있습니다. 임계값은 점수를 바꾸지 않습니다. 이미 계산한 점수 위에 선을 하나 긋고 위아래를 나눌 뿐입니다. 사건이 일어난 날과 평범한 날의 점수 순서는 임계값을 어디에 두든 그대로입니다.

그래서 점수가 둘을 잘 가르지 못하면 선을 어디로 옮겨도 소용이 없습니다. 놓친 사건의 점수가 평범한 날의 점수 사이에 섞여 있다면, 그 사건에 닿도록 선을 옮기는 순간 그보다 점수가 나쁜 평범한 날이 전부 함께 걸립니다. 앞의 표가 보여 준 현상이 바로 이것입니다. 재현율이 오르려면 사건 하나를 얻는 대가로 평범한 날 여러 날을 내주어야 했습니다.

체에 비유하면 이해가 쉽습니다. 임계값 조정은 체의 구멍 크기를 바꾸는 일입니다. 큰 돌과 모래가 섞여 있다면 구멍을 조절해 둘을 나눌 수 있지만, 돌과 모래의 크기가 비슷하면 구멍을 아무리 조절해도 나누지 못합니다. 그때 필요한 일은 구멍 조절이 아니라 재료를 다르게 재는 일입니다.

다시 말해 재현율과 오탐의 교환 비율은 임계값이 아니라 점수의 민감도가 정합니다. 임계값은 그 교환 곡선 위에서 위치만 고르는 손잡이이고, 곡선 자체를 좋게 만들지는 못합니다. 저희 기록의 표현을 그대로 옮기면 이렇습니다.

threshold 조정은 recall 개선의 right lever가 아님

이 관점으로 보면 재현율 상한 40%도 설명이 됩니다. 임계값을 옮기는 방법으로 닿을 수 있는 한계가 정해져 있었던 셈입니다. 그 위로 가려면 점수가 사건을 더 민감하게 드러내야 합니다.

검토 방식에도 원인이 하나 있습니다. 재현율 표만 만들면 완화는 언제나 좋아 보입니다. 재현율은 완화해서 떨어질 일이 없으니까요. 민감도 시뮬레이션을 재현율 중심으로 설계하면 결론이 처음부터 한쪽으로 기웁니다. 저희 기록은 이를 재현율만 보고 임계값 조정을 권장하는 전형적 편향으로 적어 두었습니다.

조치: 임계값 대신 점수의 민감도로 손잡이를 옮겼다

임계값 완화는 기각했습니다. 대신 다음 수단으로 종합 점수 자체의 민감도를 높이는 방법 두 가지를 골랐습니다. 둘 다 선을 옮기는 대신 점수가 사건을 더 잘 드러내게 만드는 쪽입니다.

  • **가중치 격자 탐색.** 종합 점수를 이루는 하위 점수 중 KOSDAQ 지수, 시장 폭(breadth), 변동성(vol)의 가중치를 올리는 조합을 격자처럼 늘어놓고 비교합니다.
  • **하위 점수 실측 재구성.** 종목을 하나씩 순회해 하위 점수를 실제 값으로 다시 계산합니다. 점수의 재료를 정확하게 만드는 방법입니다.
  • **임계값 완화는 기각.** 재현율 상한이 40%이고 매매 차단이 최대 +417%라 ROI가 음수입니다.
흐름도. 하위 점수가 가중치를 거쳐 종합 점수가 되고 PANIC 임계값을 지나면 매매를 막는다. 가중치 격자 탐색은 가중치에, 실측 재구성은 하위 점수에 작용하고, 임계값 완화는 기각했다
임계값 앞단의 두 지점이 교환 비율을 바꾼다

두 방법 모두 비용이 임계값 수정보다 큽니다. 그래도 고른 이유는 효과가 닿는 자리가 다르기 때문입니다. 임계값은 평범한 날과 사건일을 같은 선으로 나눌 뿐이지만, 점수의 민감도를 높이면 둘 사이의 간격을 벌릴 수 있습니다. 간격이 벌어지면 같은 임계값에서도 더 많은 사건이 걸립니다.

두 방법은 성격도 다릅니다. 가중치 격자 탐색은 이미 가진 하위 점수를 어떻게 섞을지 바꾸므로 새 재료가 필요 없습니다. 실측 재구성은 재료 자체를 다시 만들기 때문에 종목을 하나씩 순회해야 합니다. 앞쪽은 섞는 비율을, 뒤쪽은 재료의 정확도를 고치는 일이라 서로 대체재가 아닙니다. 어느 쪽이든 끝난 뒤에는 위 표를 새 점수로 다시 그려 ROI를 비교해야 합니다.

재현율만 보는 습관을 막으려고 임계값 민감도 시뮬레이션의 규칙도 아래처럼 남겼습니다.

  • 재현율 표와 오탐 비용표를 처음부터 함께 만듭니다.
  • 오탐은 비율만 쓰지 않고 일수 같은 절대값과 기준 대비 증가율을 같이 적습니다.
  • 재현율 상승분과 매매 차단 증가분을 묶어 ROI를 계산합니다.
  • 표를 나열하고 끝내지 않고, 그 계산으로 단일 권장안을 냅니다.
임계값 민감도 검토 표에 넣을 칸
칸적을 내용빠지면 생기는 일
재현율후보별 재현율과 상한얻는 효과를 모른다
오탐 비율후보별 비율후보끼리 비교하기 어렵다
오탐 절대값일수·건수 같은 실제 단위비용이 작아 보인다
기준 대비 증가율현재 값과 비교한 증가폭현재보다 얼마나 나빠지는지 놓친다
ROI 판정재현율 상승 대 비용 증가표만 남고 결정이 없다

마지막 칸이 중요합니다. 후보별 숫자만 늘어놓으면 읽는 사람이 다시 눈에 띄는 쪽을 고르게 됩니다. 임계값을 건드릴지 말지를 한 문장으로 끝내야 검토가 결정으로 이어집니다.

이 규칙을 다른 시스템에 옮길 때는 오탐 비용을 그 업무의 단위로 바꿔 적으면 됩니다. 장애 알림이라면 밤중에 울린 호출 횟수, 스팸 필터라면 격리한 정상 메일 수, 이상 거래 탐지라면 사람이 다시 검토해야 하는 건수입니다. 저희에게는 그 단위가 막힌 거래일이었습니다. 단위를 정하면 재현율 표 옆에 놓을 비용표는 저절로 나옵니다.

재측정 결과: 재현율은 상한 40%, 오탐은 124일까지

한 후보만 재고 끝내지 않고 네 구간을 모두 같은 방식으로 쟀습니다. 가장 완만한 -0.50도 오탐 2.7%, 33일로 -0.60 대비 +38%이고, 가장 느슨한 -0.35는 10.1%, 124일로 +417%입니다. 재현율은 어느 구간이든 40%를 넘지 못합니다. 결과적으로 시뮬레이션이 낸 값은 재현율 20%에서 상한 40%, 오탐은 구간에 따라 33일에서 124일입니다.

이 전후 수치를 읽을 때 주의할 점이 있습니다. 20%에서 40%는 실매매에서 달성한 개선이 아니라, 임계값을 완화했다면 닿을 수 있었던 상한입니다. 저희는 그 상한이 비용에 비해 가치가 없다고 판정했고, 임계값을 옮기는 권장안을 내지 않았습니다. 이 글의 성과는 수치 상승이 아니라, 잘못된 수단에 들일 뻔한 거래일을 표로 확인한 데 있습니다.

이 표가 남긴 쓸모는 다음 검토에서 나옵니다. 사건을 또 놓치면 임계값을 조금만 낮추자는 제안이 다시 나오기 마련입니다. 그때 처음부터 시뮬레이션을 돌리지 않아도, 구간마다 치를 비용과 재현율 상한이 이미 적혀 있습니다. 판단은 임계값을 어디에 둘지가 아니라 점수의 어떤 재료를 고칠지에서 시작할 수 있습니다. 측정을 한 번 해 두면 같은 논쟁을 반복하지 않아도 된다는 점이 이 작업의 실질적인 소득입니다.

대안의 효과는 이 글의 근거 기록에 수치가 없습니다. 가중치 격자 탐색과 실측 재구성이 재현율을 얼마나 올렸는지 적지 않은 이유는 그 때문입니다. 같은 시스템에서 임계값별 세부 재현율과 놓친 사건을 다룬 기록은 자동매매 급락 감지 기준선 검토에 따로 있습니다.

남는 한계: 무엇을 아직 모르는가?

첫째, 이번 판정은 대안의 효과를 재기 전의 판정입니다. 임계값 완화가 나쁜 거래라는 사실은 확인했지만, 가중치 탐색이 더 나은 거래라는 사실은 이 기록만으로 입증하지 못합니다. 점수의 민감도를 높인 뒤에도 오탐이 함께 늘어난다면 같은 표를 다시 그려 판정해야 합니다.

임계값 완화를 영구히 금지한다는 뜻도 아닙니다. 점수의 민감도가 높아져 사건일과 평범한 날의 간격이 벌어지면, 같은 임계값 후보라도 비용과 효과가 달라집니다. 그때는 이 표가 낡은 표가 되니 새 점수로 다시 재야 합니다. 임계값 숫자는 점수와 한 쌍이라, 점수를 바꾸면서 임계값 판단을 그대로 물려받으면 안 됩니다.

둘째, 기록의 일수 단위에 어긋남이 있습니다. 원래 기록은 일수에 연간 표기를 붙였지만, 오탐 비율과 일수로 모수를 계산하면 33일을 2.7%로 나눠 약 1,222일, 124일을 10.1%로 나눠 약 1,228일이 나옵니다. 1년 치로 보기에는 모수가 너무 큽니다. 그래서 이 글은 일수를 연간 수치로 쓰지 않고 시뮬레이션 기간 전체의 값으로 읽었습니다. 증가율은 같은 모수끼리 비교한 값이라 단위와 상관없이 그대로 유효합니다.

셋째, ROI를 금액으로 환산하지 않았습니다. 막힌 하루가 평균 얼마의 기회비용인지, 놓친 사건 하나가 얼마의 손실인지는 이 기록에 없습니다. 재현율 포인트와 거래일을 직접 비교한 판정이라, 음수라는 방향은 뚜렷해도 크기는 말할 수 없습니다. 사건 하나의 손실이 아주 크다면 같은 표를 놓고도 계산이 달라질 수 있습니다.

넷째, 재현율의 분모가 작을 수 있습니다. 시장을 뒤흔드는 사건은 드물어서, 정답 사건이 조금만 달라져도 재현율이 크게 움직입니다. 표본이 작을 때 결론이 얼마나 쉽게 뒤집히는지는 작은 표본에서 결론이 뒤집힌 사례에 적어 두었습니다.

다섯째, 이 결과는 저희 점수와 저희 시장 데이터에서 나왔습니다. 구간별 숫자를 다른 시스템에 그대로 옮기면 안 됩니다. 옮겨 갈 수 있는 것은 절차입니다. 재현율 표 옆에 오탐 비용표를 놓고, 절대값을 함께 적고, 단일 권장안까지 내는 순서는 알림 규칙이든 스팸 필터든 그대로 쓸 수 있습니다. 비슷하게 탐지 규칙의 임계값을 두고 판단이 막혀 있다면 상담으로 상황을 알려 주셔도 됩니다.

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

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

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

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