flowchart LR A[수혜기업 t=0] ----->|정책시행| B[수혜기업 t=1] C[비수혜기업 t=0]-----> D[비수혜기업 t=1]
R로 CEM-DiD 분석하기
1 개요
이중차분법 (DiD: Difference in Difference). 일반적으로 정책 성과분석에 활용하는 인과관계 분석방법이다. 정책의 수혜자와 비수혜자를 식별할 수 있는 경우, 두 집단의 정책 시행 전-후를 비교하여 순수한 정책효과를 추정한다.
그런데 이중차분법은 수혜자와 비수혜자를 어떻게 식별하는가에 따라 결과의 신뢰성이 달라진다.
CEM-DiD는 그다지 결과의 신뢰성이 높은 방법은 아니다.
2 내용
2.1 이중차분법의 기본개념
이중차분법은 기본적으로 사전사후통제(control group pretest-posttest) 실험설계와 등치이다. 기업연구비를 지원하는 정부정책을 가정해보자. 정부는 이를 통해 매출액이 증가하길 기대한다.
정책시행 사전(\(t=0\)), 사후(\(t=1\))의 매출액을 모두 측정하고 있으며, 정책은 수혜기업에만 시행되었고 비수혜기업은 통제집단임을 그림으로 나타내면 아래 Figure 1 과 같다.
수혜기업 매출액은 이만큼 변했다(\(A\)):
\[ A=수혜기업매출액_{t=1} - 수혜기업매출액_{t=0} \]
정책 수혜를 받지 못한 비수혜기업도 어쨋든 매출액에 변화가 있을 것이다(\(B\)):
\[ B=비수혜기업매출액_{t=1} - 비수혜기업매출액_{t=0} \]
그런데 이 \(A\)에는 정부지원을 받아 상승한 매출액 증가분뿐만 아니라, 그냥 오른 매출액 증가분도 포함되어 있다. 갑자기 수출규제가 풀렸거나, SNS 알고리즘을 잘 탔거나, 애초에 성장중인 기업이 많았거나 등등. 그래서 이것들을 전부 정책의 효과라고 판정할 수 없다.1
\(B\)는 정책의 효과를 받지 않은 비수혜기업의 상승분이다. 즉, 갑자기 수출규제가 풀렸거나… 하는 등의 효과로 상승한 매출액은 \(B\)라고 보아도 무방한 것이다. 따라서 정책의 순효과(\(C\))는:
\[ C=A-B\\ \]
이다. \(C\)를 구하기까지 뺄셈을 총 2번 하므로 이중차분이라고 부른다. 삼중차분(DDD)도 있다. 예를 들어 이 정책이 한국에서만 통하는게 아닌지 궁금할 경우, 같은 방법을 통해 독일에서의 \(C\)를 구한 뒤, \(C_{한국}-C_{독일}\)을 계산하면 된다.
2.2 필수 전제
이렇게 계산된 \(C\)를 신뢰할 수 있을까? 지금 여기서 끝낸다면 신뢰할 수 없다.2 \(C\)가 설득력을 갖기 위해서는 다음 조건을 만족해야 한다.
수혜기업과 비수혜기업은 동질적이어야 한다.
만약 수혜기업엔 상승세인 기업들만 있고, 비수혜기업에는 그저그런 기업들만 있다면 \(C\)는 설득력을 잃는다. 정책효과로 성장한 것이 아니라 원래 잘하는 기업이었을 가능성이 있기 때문. 따라서 수혜기업과 비수혜기업을 아주 비슷한 상태로 만들어주어야 한다.
실험 연구실(Wet lab)에서는 이게 쉽다. 실험을 그렇게 설계하면 된다. 그러나 이외의 연구실(Dry lab)에서는 어렵다. 통계학자들은 이 문제를 해결하기 위해 무작위(randomization)를 사전사후통제 실험설계에 더했다. 아래 Figure 2 을 보자.
flowchart LR G(무작위표본)--->|무작위배정| A[수혜기업 t=0] G(무작위표본)--->|무작위배정| C[비수혜기업 t=0] A[수혜기업 t=0] --->|정책시행| B[수혜기업 t=1] C[비수혜기업 t=0]---> D[비수혜기업 t=1]
Figure 2 는 사실상 모든 연구의 Gold Standard이다. 이 방법을 거쳐 나온 결과는 증거레벨 최상급의 강력한 증거가 된다.
3 매칭법
그러나 현실에서는 Figure 2 를 실행하기는 어렵다:
- 윤리문제
정책이 아니라 백신이라고 가정해보자. 누구를 치료하고 누구를 치료하지 않을지는 선택의 문제가 아니다. 무작위 선택법은 윤리문제에서 자유롭지 않다. - 참여자 편향
교도소 재범방지 프로그램에 참여한 재소자는 그렇지 않은 재소자에 비해 퇴소 후 재범확률이 낮았다. 재범방지 프로그램의 효과때문일까? 아니면 재범을 원치 않는 절박한 심정의 재소자만이 프로그램에 참여했기 때문일까?- 일반적으로 정부정책은 공모를 통해 지원기업을 선발한다. 따라서 공모를 통과한 기업은 이미 기술적, 경제적 성장잠재력을 갖추고 있을 가능성이 높다.
이를 극복하기 위해 Figure 2 의 대안적 방법이 다수 제안되었다.3 그중 매칭법은 가장 대중적으로 활용되는 대안이다. 종류가 많은데, 여기서는 글의 주제를 고려하여 필요한 만큼만 소개한다.
구분 | 내용 |
---|---|
무엇을? | 변수들을 있는 그대로 or 변수 1개로 합쳐서 |
어떻게? (매칭 알고리즘) | 정확히 일치하는 맞는 값만 or 일정 범위 이내에 or 제일 가까운 값만 or 구간 별로 분할해서 |
얼마나? | 일대일 매칭 or 일대다 매칭 |
3.1 EM: Exact Matching
- 변수들을 있는 그대로,
- 정확히 일치하는 값만,
- 일대일 or 일대다 모두 가능
완전 매칭으로 번역되기도 한다. 말 그대로 완전히 같은 값을 갖는 비교집단만을 매칭한다. 만약 수혜기업인 스탯에이드의 매출액이 12,345,678원이라면, 비수혜기업 중 매출액이 정확히 12,345,678원인 기업만 매칭한다. 1이라도 차이나면 매칭하지 않는다. 만약 매출액 12,345,678원 기업을 못잧으면? 그냥 버린다. 스탯에이드를 분석에서 제외한다.
가장 직관적이지만 단점도 명확하다. 분석에서 탈락하는 대상이 지나치게 많아진다. 매칭 기준을 매출액 하나만 잡아도 탈락이 수두룩인데 설립년도, 업종, 영업이익 등까지 고려하면 사실상 남는게 없는 수준.
3.2 CEM: Coarsened Exact Matching
- 변수들을 있는 그대로,
정확히 일치하는 값만,→ 일정 범위 이내에 or 제일 가까운 값만- 일대일 or 일대다 모두 가능
이 글의 주제. 기본적으로 EM과 같지만 기준을 조금 느슨하게(Coarsened) 풀어준 방법. 기준은 다양하다. 위아래로 5%를 고려할 수도 있고, 직접 숫자를 지정해줄 수도 있고(e.g., 위아래로 100,000만원), 제일 가까운 값 n개만 가져오는 방법도 있다.
EM계열은 매칭법의 직관성을 유지하되, 기준을 느슨하게 하여 실속도 챙긴 방법이다. 그러나 여전히 한계는 명확하다. 많은 변수를 고려할 수 없다는 점. 변수를 많이 고려할수록 매칭 자체는 더 정확해지지만, 분석대상이 점점 적어져 신뢰성이 낮아진다. 선형대수학은 이를 차원의 저주라고 표현한다. 이 차원의 저주는 다항회귀분석의 한계와 정확히 일치한다. 사실상 같은 말.
3.3 PSM: Propensity Score Matching
변수들을 있는 그대로,변수 1개로 합쳐서,정확히 일치하는 맞는 값만,or 일정 범위 이내에 or 제일 가까운 값만 or 구간 별로 분할해서- 일대일 or 일대다 모두 가능
PSM을 설명하는 글이 아니므로 간략하게만 설명하고 넘어가도록 하자.
쉽게 말해:
- 주어진 데이터를 활용해서,
- 분석대상이 수혜기업일 확률을 계산한 뒤,
- 이 확률을 성향점수(최소 0, 최대 1)라고 명명하고,
- 이를 기준으로 매칭을 수행하는 것.
1개의 변수만을 고려하므로 차원의 저주 문제에서 자유로우며, 0~1 값만을 가지므로 매칭 알고리즘 선택의 폭이 넓다.4
현실적인 단점도 있다. 경험상 정부정책 성과평가 보고서에 활용하기 어렵다. 방법론 자체를 이해시키는 것이 상당히 괴롭다어렵다.
4 CEM-DiD 실습

먼저 본격적인 매칭 전에 수혜기업과 비수혜기업의 매출액 추이를 확인해보자. Figure 3 과 같다. 수혜기업의 정책시행 전-후의 상승세가 나타난다. 그러나 이대로는 정책이 효과적이었다고 주장하기는 어렵다. 왜냐하면:
- 정책시행 전, 수혜기업 매출액이 이미 높고
- 정책시행 전-후 비수혜기업도 상승세이며,
- 증가폭도 수혜기업이 더 높기 때문.
이미 잘하고 있는 기업을 대상으로 정책지원이 이루어진 것이 아니냐라는 반문이 제기된다. 뿐만 아니라 비수혜기업의 매출액 성장세를 고려하면, 굳이 정책이 필요했는가?라는 의문도 충분해 가능하다. 이 그래프는 정부정책 성과평가 보고서에 사용할 수 없다.
여기서 매칭의 필요성이 대두된다. 정책 2년전, 1년전을 기준으로 매출액이 비슷한 기업들만 골라서 그래프를 다시 그려보면 어떨까? 어느정도 수준이 비슷한 기업끼리만 비교했을 때 수혜기업의 상승세만 두드러진다면 정부정책 성과평가 보고서에 넣을 수 있지 않을까? 매칭 알고리즘은 MatchIt
패키지를 사용하여 적용한다.
이 글에서는 정책시행 2년전, 1년전의 매출액을 아주 근접하게 매칭시키는 것을 목표로 한다. matchit()
함수는 특별한 옵션을 지정해주지 않을 경우, 알아서 최단거리 값을 매칭해준다. 시험삼아 최단거리 1:1 매칭을 result1
에 할당해보자.
CEM은 좀더 복잡하다. matchit()
함수에 method = "cem"
옵션이 있긴 하지만, CEM 기능을 완벽히 수행해주지는 않는다. 기본옵션인 method = "nearst"
을 이용해서 위아래 5% 안에 들어오도록 비수혜집단 데이터를 미리 잘라주자. 그후 matchit()
을 적용하여 최단거리 값을 찾아 매칭해주는 것.
다시 말해, 매칭 가능한 후보군을 ±5% 범위 내로 제한함으로써 CEM을 수동구현한 것. method = "cem"
는 조금 다른 방식으로 작동하는데, 궁금하다면 이 문서를 읽어보자.
아래 코드가 다소 복잡해보이지만 원리는 간단하다. 수혜기업을 하나씩 불러내서, 매출액 위아래 5% 범위를 지정해준 뒤, 그 범위 안에 있는 비수혜기업 리스트를 가져온다. 그 후 matchit()
해주면 끝.
cal.ran <- 0.05 # 위아래 범위
result2 <- result1 %>% slice()
for(k in 1:nrow(df %>% filter(`수혜기업 여부` == "수혜기업"))) {
row_k <- df %>% filter(`수혜기업 여부` == "수혜기업") %>% slice(k)
key1 <- row_k$`정책 1년전`
key2 <- row_k$`정책 2년전`
top1 <- key1 * (1 + cal.ran)
bottom1 <- key1 * (1 - cal.ran)
top2 <- key2 * (1 + cal.ran)
bottom2 <- key2 * (1 - cal.ran)
df.treat <- df %>%
filter("수혜기업 여부" == "수혜기업") %>%
slice(k)
df.control <- df %>%
filter("수혜기업 여부" == "비수혜기업") %>%
filter("정책 1년전" > bottom1, "정책 1년전" < top1,
"정책 2년전" > bottom2, "정책 2년전" < top2)
df.temp <- bind_rows(df.treat, df.control)
if (nrow(df.temp) >= 2) {
result.temp <- matchit(`수혜기업 여부` ~ `정책 2년전` + `정책 1년전`,
data = df.temp, method = "nearest") %>%
match.data()
result2 <- bind_rows(result2, result.temp)
}
}
별로 선호하는 방식의 코드는 아니지만, 어쩔 수 없다.
이렇게 생성한 result1
, result2
로 각각 그래프를 그려보면 Figure 4 와 같다.
단순 최단거리 매칭이나 CEM이나 수혜기업과 비수혜기업을 모두 근접한 수준으로 붙여준다. 차이점은, CEM의 경우 매칭한 수준이 좀더 섬세하다. 만약 표본 크기에 좀 더 여유가 있다면 칼리퍼 범위 cal.ran
를 조절하면서 시도해보면 된다.
5 그럼 이제 된건가?
Figure 4 에서 확인되는 CEM 결과는 얼핏보면 기업 매출액 증가에 대한 정책효과를 강력하게 뒷받침하는 것으로 보인다. 실제로 정부정책의 많은 보고서가 이 방법을 통해 정책효과를 홍보한다. 그러나 CEM에는 치명적인 문제가 있다.
5.1 정부정책 참여시점은 기업마다 모두 다르다
그래프 상으로는 “정책 n년전” 등으로 표현하고 있지만, 실제로는 서로 다른 년도에서의 매출액이 한데 뭉쳐져 있는 것이다. 다음 표를 보자.
기업명 | 지원사업 참여시점 |
---|---|
A사 | 2017년 |
B사 | 2021년 |
C사 | 2022년 |
… | … |
같은 정책시행 연도로 뭉뚱그렸지만, A사에게는 코로나 이전이고 B사에게는 판데믹 기간, C사에게는 포스트 코로나 시점이다. 서로다른 사회경제적 환경에서 발생한 매출액을 하나의 시점으로 한데 합치는 것이 과연 옳은 비교법인가?
5.2 정부의 지원사업은 공모를 통해 모집한다
Figure 2 를 다시 떠올려보자. 아무리 매칭을 한들, 무작위표집 및 무작위배정이 아니고서는 수혜기업과 비수혜기업의 동질성을 단언할 수 없다. 보통 정부의 지원사업은 까다로운 조건을 통과한 기업을 공모선정하여 진행된다. 정부지원금을 아무렇게나 쓸 수는 없기 때문이다. 다시 말해, 수혜기업은 이미 성장잠재력이 어느정도 증명된 기업이다. 정부 지원사업이 아니었어도 충분히 성장했을지도 모르는 기업인 것이다.
물론 그렇다고 해서 CEM은 증거레벨이 아주 없는 방법이라고는 할 수 없다. 매출액은 그 자체로 기업을 나타내는 대표적인 지표이다. 업종, 업력, 지역이 동일할 때 매출액, 종업원수, 영업이익이 비슷한 범위내에 있는 기업은 동질성이 일정 이상 확보된 기업이라고는 할 수 있다. 이 정도면 단언까지는 아니어도 근거있는 주장 정도는 가능하다고 생각된다.
Footnotes
심지어 정부정책이 마이너스 효과일지라도 매출액이 상승하는 경우도 있다. 정책성과가 잘 나오는 것이 유리하다고 생각할 수 있겠지만, 전혀 그렇지 않다. 차년도 사업의 목표치 설정에 반영되기 때문이다. 매출액 상승폭 전체를 정책효과로 보고하면 사업담당자에게 큰 부담이 된다.↩︎
논문에도, 보고서에도 넣을 수 없다.↩︎
이중차분법이 고정효과 모델의 특수한 형태라는 점에 착안한 방법, 수혜기업-비수혜기업의 동질성을 간접적으로 증명하기 위한 평행추세 검증 등 증거레벨을 다소 희생하여 다양한 방법들이 고안된 바 있다. 핵심 키워드는 무엇을, 어떻게, 얼마나.↩︎
그러나 여전히 주어진 데이터로만 성향점수를 계산하기 때문에, 주어지지 않은 변수로 인한 영향력은 고려할 수 없다는 단점이 존재한다. 더 알고싶다면 내생성에 대해 공부해보자.↩︎
일반적으로 업종, 업력, 지역을 기본적으로 매칭하고, 매출액, 영업이익, 연구개발비 비중, 종업원 수 등을 추가적으로 고려한다.↩︎