기본 콘텐츠로 건너뛰기

추천 가젯

[스크리너 톱700-640] 포스코엠텍 - 리튬 테마가 만든 자리, 사업은 여전히 철강 포장

밸류체인 플랫폼의 저평가 스크리너를 순서대로 뜯어보는 연재, 601~700위 구간입니다. 601~700위는 전부 저평가 컷(67.2점)에 못 미친 '적정' 판정이고, 이 연재를 통틀어 컷에서 가장 먼 구간입니다. 640위 포스코엠텍(009520). 기준일 2026-08-28, 스크리너 점수 52.9점 — 저평가 컷에 14.3점 모자란 적정 판정입니다. 가치함정 주의 깃발(yellow) 이 떠 있습니다. 포스코 제철소의 포장 용역사, 이름과 달리 리튬 회사가 아니다 포스코엠텍의 한국거래소 업종 분류는 '1차 철강 제조업'이고, 공시된 주요 제품은 철강포장용역과 알루미늄 탈산제다. 포항·광양제철소에서 나오는 냉연제품 포장 작업을 도맡고, 포스코의 마그네슘·페로망간 설비 일부를 위탁운영한다. 원래 하던 페로실리콘(합금철) 사업은 2019년 심팩(SIMPAC)에 매각해 지금은 남아 있지 않다. 최대주주는 포스코(지분 48.85%)이고, 2026년 7월 포스코와 1,781억원 규모(최근 매출액 대비 49.8%) 포장 외주계약을 다시 맺었다 — 매출의 절반이 사실상 단일 계약에서 나오는 구조다. 흥미로운 건 2026년 대법원 판결이다. 포스코 사내하청 다수가 불법파견으로 인정돼 직접고용 대상이 됐지만, 포스코엠텍 소속 냉연포장 근로자 4명은 예외였다 — 법원이 "포스코엠텍이 독립적인 기술과 전문성을 갖춘 업체"라고 판단했기 때문이다. 사업 존속성 관점에서는 이 판결이 오히려 이 회사의 아웃소싱 지위를 지켜준 셈이다. 연도 매출(억원) 영업이익(억원) 순이익(억원) 2022 3,422 64 48 2023 3,414 45 49 2024 3,466 14 6 2025 3,574 10 14 매출은 3,400억대에서 정체된 채 영업이익만 4년 연속 쪼그라들었다(64억→45억→14억→10억). 2025년은 순이익(14억)이 영업이익(10억)보다 많은 역전이 나오는데, 원인은 리서치로 확인되지 않는다 — 영업외 손익 ...

[11.분석 플랫폼] 모델 검정 공부하기 - 다중검정

들어가며

앞의 세 편은 전부 한쌍 페어로 검정을 해보았습니다. 계수 하나, 표 하나, 적중률 하나. 그런데 실무에서 그렇게 하는 사람이 있나요. 없습니다. 세상은 복잡하지요.

변수를 여러 개 넣어 보고, 기간을 이렇게도 저렇게도 잘라 보고, 모델을 몇 개 돌려 봅니다. 측정을 수십 번 합니다.

오늘은 그 다수의 변수를 측정할 때 무슨 일이 벌어지는지를 봅니다.

결론부터 말씀드리면, 측정을 여러 번 대면 아무것도 없어도 뭔가가 걸립니다. 그리고 그게 걸린 줄 모르고 보고하는 일이 아주 흔합니다.

하나, 오늘 풀 문제

딜 성사에 영향을 주는 변수를 찾고 싶습니다. 후보를 여섯 개 뽑았습니다.

① 업종 ② 거래 규모 ③ PE 참여 여부 ④ 인수 지분율 ⑤ 소재 지역 ⑥ 매출성장률

여섯 개를 각각 검정했더니 이런 p값이 나왔습니다.

업종 p = 0.030 ← 유일하게 0.05 아래 거래 규모 p = 0.120 PE 참여 p = 0.210 지분율 p = 0.380 지역 p = 0.550 매출성장률 p = 0.810

업종만 0.05를 밑돌았습니다.

그래서 이렇게 보고합니다. "여섯 변수를 검토한 결과 업종이 유의한 변수로 확인됐습니다."

★ 이 보고가 왜 틀렸는지가 오늘 글입니다.

둘, 스무 명이 복권을 긁으면

유의수준 5%가 무슨 약속이었는지 다시 봅시다.

효과가 없는데도 있다고 잘못 말할 확률을 스무 번에 한 번으로 묶겠다는 뜻입니다.

여기서 "스무 번에 한 번"이 문제입니다. 그럼 스무 번 하면 그 한 번이 실제로 나온다는 소리잖아요.

검정 횟수별 · 아무 효과가 없는데도 하나쯤 "발견"할 확률

검정  1회  ▏             5.0 %
검정  5회  ▓▓▓          22.6 %
검정 10회  ▓▓▓▓▓        40.1 %
검정 20회  ▓▓▓▓▓▓▓▓     64.2 %
검정 50회  ▓▓▓▓▓▓▓▓▓▓▓  92.3 %

계산은 단순합니다. 한 번에 안 걸릴 확률이 0.95니까, 20번 모두 안 걸릴 확률은 0.95²⁰ = 0.36. 거꾸로 하나라도 걸릴 확률이 64%입니다.

스무 명이 각자 복권을 긁으면 누군가는 당첨됩니다. 그 당첨자를 가리키며 "이 사람은 복권 실력이 있다"고 말하면 안 되겠죠. 스무 명이 긁었으니 당연한 일이니까요.

우리 사례가 정확히 그 구조입니다. 변수 여섯 개가 각자 복권을 긁었고, 그중 하나가 당첨됐습니다. 업종이 특별해서가 아니라 여섯 번 긁었기 때문일 수 있지요.

진짜 아무 관계가 없어도 이렇게 됩니다

실험을 해보면 분명합니다. 성사 여부를 동전 던져서 무작위로 정한 가짜 데이터를 만들고, 여섯 변수로 검정을 돌립니다. 관계가 있을 리가 없죠.

그런데 이 짓을 100번 반복하면, 그중 26번쯤은 여섯 개 중 하나가 0.05를 밑돕니다. (검정끼리 완전히 독립이면 22.6%, 실제로는 조금 더 나옵니다.) 아무것도 없는 데이터에서도 네 번에 한 번꼴로 "발견"이 나오는 겁니다.

다중검정 한 자료에 여러 가설을 동시에 검정하는 것. 횟수가 늘수록 우연한 발견이 늘어납니다.

m 검정 횟수. 우리 사례에서는 6입니다.

보정 여러 번 검정했다는 사실을 반영해 문턱을 더 엄하게 조정하는 절차.

셋, 문턱을 어떻게 조일 것인가

방법이 두 갈래입니다. 그리고 둘이 막으려는 것이 다릅니다. 이게 핵심이라 먼저 말씀드립니다.

Bonferroni 가짜가 하나라도 섞일 확률을 5%로 묶습니다. 여섯 개를 발표했는데 그중 가짜가 하나라도 있으면 실패로 봅니다. BH (FDR) 발표한 것들 중 가짜의 비율을 5%로 묶습니다. 백 개를 발표했다면 다섯 개쯤 가짜여도 괜찮다고 봅니다.

본페로니 훨씬 엄격합니다. "하나라도"와 "비율"의 차이니까요. 그래서 쓰는 곳이 달라집니다.

Bonferroni · 문턱을 검정 수만큼 나눈다

문턱 = α / m = 0.05 / 6 = 0.0083

α는 유의수준이니까 보통 0.05를 쓰지요, 95% 기준일 때. 업종 p = 0.03(카이제곱 때 예시) > 0.0083(문턱) → 문턱을 못 넘음, 업종은 유의하지 않다, 귀무가설("업종은 성사와 무관하다")을 기각하지 못한다. 이렇게 해석하게 됩니다.

여섯 번 검정할 거니까 각 검정에 5%를 다 주지 말고 6분의 1씩 나눠 쓰자는 발상입니다. 단순하고 확실합니다.

문제는 검정 수가 늘면 문턱이 가혹해진다는 겁니다. 변수 50개를 검정하면 문턱이 0.001이 됩니다. 이 정도면 진짜 효과도 대부분 같이 없다고 봅니다.

BH(Benjamini-Hochberg) · 순위를 매겨 뒤로 갈수록 봐준다

① p값을 작은 순서로 정렬한다 ② 각 순위에서 q = p × m ÷ i (i = 순위) ③ q 를 0.05 와 비교한다

산식의 m ÷ i가 전부입니다. 1등에게는 검정횟수를 통째로 곱해 Bonferroni만큼 엄격하게 굴고, 순위가 뒤로 갈수록 나누는 순위가 커져 페널티가 가벼워집니다.

왜 뒤쪽을 순위로 나눠서 보냐면, 앞에서 이미 여러 개가 통과했다면 그만큼 진짜 발견이 실재한다는 증거이기 때문입니다.

순위 p값 문턱 혼자 보면 1 0.001 0.0083 통과 2 0.008 0.0167 통과 3 0.026 0.0250 탈락 × ← 자기 문턱을 못 넘음 4 0.030 0.0333 통과 5 0.400 0.0417 탈락 6 0.600 0.0500 탈락

주사위 여섯 개 던져서 1이 네 개 나오는 것과 같은 상황이에요. 그러니 앞쪽 순위 중에 진짜가 섞여 있다고 보는 게 자연스럽습니다. 다 가짜인데 여러 개가 나란히 작은 p값을 낼 확률은 낮거든요.

문턱을 그림으로 보면

순위 i Bonferroni BH 1 0.0083 0.0083 같음 2 0.0083 0.0167 3 0.0083 0.0250 4 0.0083 0.0333 5 0.0083 0.0417 6 0.0083 0.0500 α 까지 올라감 Bonferroni 는 평평하고, BH 는 계단으로 올라갑니다

넷, 우리 여섯 개를 실제로 계산해 봅시다

p값을 작은 순서로 세우고 q값을 구합니다.

순위 · 변수 p값 × m ÷ i q값 판정 1 업종 0.030 × 6 ÷ 1 0.180 기각 2 거래 규모 0.120 × 6 ÷ 2 0.360 기각 3 PE 참여 0.210 × 6 ÷ 3 0.420 기각 4 지분율 0.380 × 6 ÷ 4 0.570 기각 5 지역 0.550 × 6 ÷ 5 0.660 기각 6 매출성장률 0.810 × 6 ÷ 6 0.810 기각

판정 기준은 q < 0.05 입니다. 가장 좋은 것도 0.180이라 전원 기각입니다.

업종의 p값 0.030이 q값 0.180으로 바뀌었습니다. 여섯 배가 됐죠. 여섯 번 긁었으니 여섯 배 의심하겠다는 뜻입니다.

그래서 아까 그 보고는 이렇게 고쳐야 합니다.

여섯 변수를 동시에 검토했으며, 다중검정을 보정한 결과 유의한 변수는 확인되지 않았습니다.

업종의 보정 전 p값이 0.030으로 가장 낮았으나, 여섯 번 검정한 점을 반영하면 우연으로 설명 가능한 수준입니다.

BH가 Bonferroni보다 관대한 경우도 봅시다

위 사례는 둘 다 전원 기각이라 차이가 안 보였습니다. p값이 더 좋게 나온 경우로 바꿔 보겠습니다.

순위 p값 BH 문턱 BH Bonferroni 1 0.001 0.0083 통과 통과 2 0.008 0.0167 통과 통과 3 0.020 0.0250 통과 기각 4 0.030 0.0333 통과 기각 5 0.400 0.0417 기각 기각 6 0.600 0.0500 기각 기각 Bonferroni 2 개 · BH 4 개

같은 데이터인데 발견 개수가 두 배 차이납니다. 탐색 단계에서 BH를 쓰는 이유가 이겁니다. Bonferroni로 가면 볼 만한 후보까지 다 잘려서, 다음 단계로 가져갈 게 안 남거든요.

딜 성사에 영향을 주는 변수 6개를 검토했습니다.

6개를 동시에 검정했으므로 다중검정 보정(BH)을 적용했고, 보정 후 4개가 유의한 것으로 확인됐습니다 - 업종, 거래 규모, PE 참여 여부, 인수 지분율. 지역과 매출성장률은 유의하지 않았습니다.

다만 유의하다는 것은 "우연으로 설명되지 않는다"는 뜻이며, 각 변수가 성사에 얼마나 큰 영향을 주는지는 별도로 확인해야 합니다.
q값 다중검정을 보정한 뒤의 값. 판단은 p가 아니라 이 값으로 합니다.

FDR False Discovery Rate. 발견했다고 선언한 것들 중 가짜가 차지하는 비율.

FWER 가짜가 하나라도 섞일 확률. Bonferroni가 통제하는 대상입니다.

1종 오류 효과가 없는데 있다고 말하는 실수. 유의수준 α가 묶는 대상입니다.

2종 오류 효과가 있는데 없다고 말하는 실수. 표본이 적을 때 잘 생깁니다.

검정력 진짜 효과가 있을 때 그걸 잡아낼 확률. 1 − 2종 오류 확률입니다.

다섯, 여기서 한계점을 알고 가긴 해야합니다

① 몇 번 검정했는지를 세지 않습니다

이게 가장 크고 가장 흔합니다. m을 정직하게 세는 사람이 드물어요.

보고서에 여섯 개를 썼다고 m이 6인 게 아닙니다. 실제로 돌려 본 횟수 전부가 m입니다. 변수를 열다섯 개 넣어 보고 여섯 개만 남겼다면 m은 15입니다. 기간을 3년·5년·10년으로 잘라 봤다면 거기에 3을 곱합니다. 모델을 회귀·부스팅·SVM 세 개 돌려 봤다면 또 3을 곱하고요.

그러면 m이 금세 100을 넘습니다. 즉, 변수 15개 × 기간 3개 × 모델 3개 = 135번. 그런데 보고서에는 "6개 변수를 검토했다"고 적힙니다.

그리고 아무도 그걸 세지 않습니다. 보고서에는 마지막에 살아남은 하나만 적히니까요. 이걸 숨은 다중검정이라고 부릅니다.
② 결과를 보고 나서 가설을 만듭니다

여섯 개를 다 돌려 보고 업종이 걸리니까, 보고서에는 "업종이 성사에 영향을 준다는 가설을 검정했다"고 씁니다. 나머지 다섯 개는 안 쓰고요.

이렇게 쓰면 읽는 사람은 m=1로 이해합니다. p=0.030이 그대로 유효해 보이죠. 여섯 번 긁었다는 사실이 지워지면 보정할 방법 자체가 사라집니다.

③편의 단측·양측 함정과 같은 구조입니다. 결과를 본 뒤에 규칙을 바꾸는 것. 다만 이쪽이 훨씬 발견하기 어렵습니다. 안 쓴 다섯 개는 흔적이 안 남으니까요.
③ 보정하면 진짜도 같이 죽습니다

이런 다중검정의 보정이 공짜는 아닙니다. 문턱을 조이면 진짜 효과를 놓칠 확률이 올라갑니다. 이걸 검정력이 떨어진다고 말합니다.

Bonferroni로 변수 50개를 검정하면 문턱이 0.001입니다. 웬만한 진짜 효과도 이 문턱은 못 넘어요. 가짜를 막으려다 진짜까지 막는 겁니다.

그래서 확인 단계에서는 Bonferroni, 탐색 단계에서는 BH를 씁니다. 탐색은 후보를 추리는 자리라 가짜가 몇 개 섞여도 다음 단계에서 걸러지거든요.

잠깐, 1종 오류와 2종 오류

여기까지 오면서 두 가지 실수 케이스에 대해 계속 이야기했습니다. 이름을 한번 붙여보지요.

실제로 효과가 | 있다 없다 ────────────────────────────────────────── 있다고 말했다 정답 1종 오류 없다고 말했다 2종 오류 정답

1종 오류는 없는 걸 있다고 말하는 것입니다. 유의수준 5%가 묶는 게 정확히 이겁니다. 그리고 오늘 글 전체가 이 이야기예요. 스무 번 검정하면 64% 확률로 헛것이 걸린다는 것, 그게 1종 오류가 쌓이는 현상입니다.

2종 오류는 있는 걸 없다고 말하는 것입니다. ②편에서 "표본 50건으로는 24%p 차이도 못 잡는다"고 했던 게 이거고요. 차이는 실재하는데 자가 못 재서 놓친 겁니다.

★ 둘은 시소입니다. 문턱을 조이면 1종 오류가 줄고 2종 오류가 늘어납니다. 한쪽만 없앨 수는 없습니다.

그래서 보정은 공짜가 아닙니다. 가짜를 막는 대가로 진짜를 놓칠 위험을 사는 거예요.

여섯, 플랫폼에서 실제로 걸렸습니다

저평가 팩터 여섯 개를 Fama-MacBeth 회귀로 동시에 검정한 적이 있습니다. 개별 p값은 0.03까지 내려갔습니다.

Fama-MacBeth 주식 수익률을 설명하는 요인을 찾을 때 쓰는 회귀 방법입니다. 만든 사람 두 명(Fama, MacBeth)의 이름을 그대로 붙인거지요. 그래서 기억을 잘 못합니다 -_- 근데 잘 나가는 방식이지요.

결국 뭘 하려는 거냐면 이런 질문에 답하려는 겁니다. PBR이 낮은 종목이 정말로 수익률이 높은가?

그냥 회귀를 돌리면 왜 안 되냐면, 문제가 하나 있습니다. 같은 달에는 종목들이 다 같이 움직입니다. 시장이 좋은 달에는 PBR이 높든 낮든 대부분 오르거든요. 이걸 무시하고 전 종목·전 기간을 한 통에 넣고 돌리면, "그 달 시장이 어땠나"가 답을 만들어 버립니다.

그래서 두 단계로 나눕니다.

1단계 달마다 따로 회귀를 돌린다 2020년 1월 → PBR 계수 −0.5 2020년 2월 → PBR 계수 −0.3 2020년 3월 → PBR 계수 +0.2 ... 240 개월이면 계수가 240 개 2단계 그 240 개 계수의 평균이 0 과 다른지 t검정

1단계에서 시장 효과가 사라집니다. 한 달 안에서만 비교하니까요. 그 달이 좋았든 나빴든, 그 안에서 PBR 낮은 종목이 더 올랐는지만 봅니다.

2단계가 우리가 아는 t검정입니다. 계수 240개를 하나의 표본으로 놓고 "평균이 0이냐"를 묻는 거죠. 그래서 t=−2.65 같은 값이 나옵니다.

자 이렇게 동시검정을 진행해 보면,

Fama-MacBeth 6팩터 동시검정 개별 p값 최소 0.03 BH 보정 후 최소 q 0.177 → 전원 기각

보정 전 숫자만 보면 하나는 살아남을 것 같았습니다. 보정하니 여섯 개 전부 날아갔습니다.

반면 패널 고정효과 회귀는 달랐습니다. 이건 같은 대상을 여러 시점에 걸쳐 관측한 데이터를 다루는 회귀입니다. 이름을 두 토막으로 떼면 이렇습니다.

패널 — 데이터 모양입니다.

삼성전자 2020년 2021년 2022년 ... SK하이닉스 2020년 2021년 2022년 ... 현대차 2020년 2021년 2022년 ...

이런식으로 기업 × 연도로 격자가 짜인 데이터셋인데, 한 시점만 보면 횡단면, 한 기업만 보면 시계열인데, 둘 다 있는 게 패널입니다.

고정효과는 이 데이터의 문제를 푸는 방법입니다. 기업마다 타고난 차이가 있습니다. 브랜드, 경영진, 업종 특성 같은 것들이요. 이게 측정이 안 되는데 수익률에는 영향을 줍니다. 그래서 이번 케이스에는 그냥 회귀를 돌리면 이 차이가 PBR 계수에 섞여 들어갑니다.

고정효과는 이걸 기업마다 자기 평균을 빼서 없앱니다.

삼성전자 PBR 1.5, 1.8, 1.2 → 평균 1.5 를 뺌 → 0, +0.3, −0.3 현대차 PBR 0.5, 0.7, 0.4 → 평균 0.53 을 뺌 → −0.03, +0.17, −0.13

이제 비교가 기업 안에서만 일어납니다. 삼성전자가 자기 평소보다 PBR이 높았던 해에 수익률이 어땠나. 삼성과 현대를 비교하는 게 아니라요. 기업의 타고난 차이는 평균에 다 흡수돼 사라집니다.

즉, 패널 고정효과 회귀 BH 보정 후 q < 0.001 → 통과

저평가 팩터의 유효성을 두 가지 방법으로 검정했습니다.

Fama-MacBeth 회귀(월별 횡단면 회귀 후 계수 평균 검정)에서는 팩터 6개를 동시에 검정했으며, 다중검정 보정 후 유의한 팩터가 확인되지 않았습니다. 보정 전 최소 p값이 0.030이었으나 보정 후 q값은 0.177이었습니다.

패널 고정효과 회귀(기업 고유 특성을 통제)에서는 보정 후에도 q < 0.001로 유의성이 유지됐습니다.

다만 두 방법은 서로 다른 요인을 통제하며, 패널 회귀는 관측 수가 커 통계량이 크게 나오는 경향이 있습니다. 표준오차를 기업·연도 클러스터로 보정한 뒤에도 결과가 유지되는지 확인이 필요합니다.

이게 보정을 하는 진짜 이유입니다. 결과를 깎아내리려는 게 아니라, 살아남은 것을 믿을 수 있게 만들려는 것이에요. 보정 없이 통과한 여섯 개보다, 보정하고도 통과한 하나가 훨씬 설득력이 있습니다.

정리하면

넷째 줄이 추가됐는데, 앞의 셋과 성격이 다릅니다. 다중검정 보정은 데이터를 재는 자가 아니라 검정 결과를 재는 자거든요.

재는 대상 모델 안을 확신 크기 열어야 하나 t검정 연속형 값 하나 예 t 계수 카이제곱 여러 칸의 빈도 예 χ² V 이항검정 맞음 / 틀림 둘 아니오 p 적중률−기준 다중검정 앞선 검정 결과들 − q −

그래서 이 자는 앞의 세 자 뒤에 옵니다. t검정을 여러 번 했으면 그 결과를, 이항검정을 여러 번 했으면 그 결과를 다시 재는 겁니다. 자를 재는 자예요.

보정의 두 갈래 Bonferroni 가짜가 하나라도 섞일 확률을 묶는다 문턱 = α / m, 확인 단계에서 BH (FDR) 발견한 것 중 가짜 비율을 묶는다 q = p × m ÷ i, 탐색 단계에서

다음 편은 표준오차 보정입니다. 오늘은 검정을 여러 번 해서 문제가 생겼는데, 다음 편은 한 번만 했는데도 눈금이 잘못 그려져 있는 경우입니다.

③편에서 5,000건을 월별로 다시 묶었던 이야기, 같은 달에 속한 예측들의 성적이 서로 닮는다는 그게 왜 필요했는지를 제대로 다룹니다. 가장 지루하긴 한데 가장 자주 결론을 바꾸는 케이스입니다.

이걸 말해도 의사결정자들이 이해하지 못할텐데 이렇게까지 해야하나? 이 질문이 저도 딜레마입니다. 그래도 그거 왜 그럽니까? 라고 물어볼 때, 대답할 줄 알면 기부니가 좋습니다.

https://k-valuechain.com/lab

작성: 2026. 8. 이알렉산드로

댓글

가장 많이 본 글