데이터 고르고 다듬기, KDD 1~3단계
1. 데이터 고르고 다듬기, KDD 1~3단계
분석 시간의 절반 이상은 데이터를 고르고 다듬는 데 쓰인다는 말이 있습니다. AI에게 말로 시키는 지금도 마찬가지입니다. AI는 시킨 대로 계산할 뿐, 2026년이 아직 8월까지만 찼다는 사실을 스스로 챙기지 않습니다. 여기서는 KDD의 앞 세 단계, 선택, 전처리, 변환을 11장 1절에서 연 대화창에서 이어서 합니다.
시간: 4:20~4:55, 35분입니다. 1.1~1.3(선택과 전처리)에 15분, 1.4~1.5(변환과 사건 연표 붙이기)에 20분을 씁니다.
1.1 선택, 질문이 데이터를 고른다
오늘의 질문은 "올해 9~12월 입도객은 몇 명이고, 그 예측을 믿어도 되나"입니다. 이 질문에 필요한 데이터를 거꾸로 따져 봅니다.
| 질문의 조각 | 필요한 것 | 고른 데이터 |
|---|---|---|
| 9~12월이 몇 명인가 | 월 단위로, 되도록 긴 기간 | 월별 입도 관광객(ijto-17.csv), 2013년부터 |
| 내국인과 외국인 중 누가 움직이나 | 둘이 나뉜 열 | 같은 파일의 domestic, foreign |
| 왜 어떤 해는 꺾였나 | 그때 무슨 일이 있었는지 | 국내외 주요 사건 연표(events.csv) |
데이터허브에는 일별 입도객도 있지만 넉 달 뒤를 예측하는 데는 월별이면 충분하고, 일별은 요일과 날씨의 잡음이 커서 오히려 패턴을 가립니다. 질문보다 자세한 데이터가 늘 좋은 것은 아닙니다. 이것이 KDD 1단계에서 사람이 내리는 판단입니다.
1.2 전처리, 빈칸과 이상한 값 찾기
먼저 데이터의 건강 검진을 시킵니다. 9장 5절 검증 3질문의 첫 번째, "숫자가 상식적인가"를 AI에게 대신 확인시키는 것입니다.
ijto-17.csv를 점검해줘.
1. 2013-01부터 마지막 달까지 빠진 달이 있는지
2. 빈칸이 있는지
3. 모든 행에서 total이 domestic + foreign과 정확히 같은지
결과만 세 줄로 알려줘.
이렇게 나와야 합니다. 빠진 달 0개, 빈칸 0개, 모든 행에서 total = domestic + foreign. 공공데이터는 이 셋 중 하나쯤은 어긋나는 일이 흔하니, 새 데이터를 받으면 같은 프롬프트로 점검하는 습관을 들입니다.
이번에는 연도별로 큰 그림을 봅니다.
연도별로 total, domestic, foreign 합계를 만 명 단위로 표로 보여줘.
그 해에 들어 있는 개월 수도 열로 같이 넣어줘.
이렇게 나와야 합니다. (일부 연도)
| 연도 | 전체(만 명) | 내국인 | 외국인 | 개월 수 |
|---|---|---|---|---|
| 2016 | 1,585 | 1,225 | 360 | 12 |
| 2017 | 1,475 | 1,352 | 123 | 12 |
| 2019 | 1,529 | 1,356 | 173 | 12 |
| 2020 | 1,024 | 1,002 | 21 | 12 |
| 2021 | 1,201 | 1,196 | 5 | 12 |
| 2024 | 1,377 | 1,186 | 191 | 12 |
| 2025 | 1,386 | 1,162 | 224 | 12 |
| 2026 | 935 | 761 | 174 | 8 |
마지막 줄을 보세요. 2026년이 935만 명으로 2025년보다 450만 명이나 적어 보입니다. 올해 제주에 큰일이 난 걸까요? 아닙니다. 2026년은 8월까지만 들어 있기 때문입니다. 기간이 덜 찬 해를 다른 해와 그대로 비교하는 것은 AI가 아주 흔하게 저지르는 실수입니다. 개월 수 열을 같이 달라고 한 이유가 여기 있습니다. 개월 수를 빼고 물으면 AI가 "2026년 입도객이 급감했다"는 해석까지 붙여 주는 경우가 있습니다.
같은 기간끼리 비교하면 그림이 뒤집힙니다.
1~8월만 놓고 2023년부터 2026년까지 해마다 total, domestic, foreign 합계를 만 명 단위로 비교해줘.
2026년 1~8월이 2025년 1~8월보다 각각 몇 % 많거나 적은지도 알려줘.
이렇게 나와야 합니다.
| 1~8월 합계 | 전체 | 내국인 | 외국인 |
|---|---|---|---|
| 2025년 | 898.4만 | 746.3만 | 152.1만 |
| 2026년 | 935.2만 | 761.4만 | 173.8만 |
| 증감 | +4.1% | +2.0% | +14.3% |
올해는 줄어든 해가 아니라 늘어난 해입니다. 이 +4.1%(1.041배)는 11장 4절에서 올해 남은 넉 달을 예측할 때 다시 씁니다.
좋은 질문 공식의 '요청'에 함정을 미리 적어 둡니다. "그 해의 개월 수도 같이", "같은 기간끼리"라는 말 한마디가 AI의 실수를 막습니다. 무엇이 함정인지 아는 것이 사람의 일이고, 그것을 프롬프트에 적는 것이 바이브 데이터 분석의 실력입니다.
1.3 큰 그림 한 장, 꺾인 해 찾기
연도별 합계를 그래프로 봅니다.
2013년부터 2025년까지 연도별 입도객을 막대그래프로 그려줘.
막대 하나를 내국인과 외국인으로 쌓아서 색을 나눠줘. 2026년은 8월까지라 빼줘.
막대가 꺾인 해가 보입니다. 2017년에는 외국인이 3분의 1로 줄었고(360만 → 123만), 2020년에는 전체가 1,529만에서 1,024만으로 3분의 1이 사라졌으며, 2021~2022년에는 외국인이 거의 0이 되었습니다. 2015년에도 외국인이 한 번 줄었습니다. 숫자는 "언제, 누가, 얼마나"까지만 알려 줍니다. "왜"는 데이터 바깥에 있습니다. 그래서 사건 연표를 붙입니다.

위 프롬프트의 정답 모양입니다. 막대 하나가 한 해이고, 아래 파란 부분이 내국인, 위 주황 부분이 외국인, 막대 위 숫자가 전체(만 명)입니다. 주황 부분만 따라가 보세요. 2016년에 360만 명으로 가장 두꺼웠다가 2017년에 123만 명으로 얇아지고, 2020~2022년에는 거의 보이지 않다가 2023년부터 다시 두꺼워집니다. 파란 부분은 2020년에 한 번 크게 낮아진 뒤 2022년 1,380만 명으로 가장 높았고, 그 뒤로는 조금씩 낮아지고 있습니다. 같은 "꺾인 해"라도 2017년은 주황만, 2020년은 파랑과 주황이 함께 줄었다는 차이가 1.5에서 사건의 성격을 가르는 단서가 됩니다. AI가 그린 그래프와 맞춰 볼 때는 2026년 막대가 빠졌는지부터 확인합니다. 들어 있다면 8월까지만 찬 해가 끼어든 것입니다.
1.4 변환, 분석하기 좋은 열 만들기
KDD 3단계는 분석 목적에 맞게 열을 새로 만드는 일입니다. 오늘 쓸 열은 9장 4절의 YoY(전년 동월 대비 증감률)입니다. 이번 달을 작년 같은 달과 비교하므로 계절의 영향이 걷힙니다.
total, domestic, foreign 각각에 대해 전년 동월 대비 증감률(YoY, %) 열을 만들어줘.
그리고 total의 YoY가 가장 크게 떨어진 달 다섯 개를 month, total, total YoY, foreign YoY로 표로 보여줘.
이렇게 나와야 합니다.
| 달 | 전체(명) | 전체 YoY | 외국인 YoY |
|---|---|---|---|
| 2021-01 | 468,016 | -62.6% | -98.4% |
| 2020-03 | 480,762 | -58.7% | -97.2% |
| 2020-04 | 542,258 | -58.2% | -99.2% |
| 2020-12 | 625,865 | -51.5% | -98.1% |
| 2020-02 | 628,804 | -43.4% | -73.9% |
모두 2020년 2월부터 2021년 1월 사이입니다. 외국인 YoY가 -97%, -99%라는 것은 거의 아무도 오지 않았다는 뜻입니다.
검산 한 번: AI가 YoY를 "12줄 위와 비교"하는 식으로 계산했다면, 빠진 달이 있을 때 엉뚱한 달과 비교하게 됩니다. 1.2에서 빠진 달이 0인지 먼저 확인한 이유입니다. 표가 이상하면 "YoY를 어떤 기준으로 계산했는지 한 줄로 설명해줘"라고 물어 확인합니다. 전처리를 건너뛰면 변환이 틀어집니다.
1.5 사건 연표 붙이기
이제 사건 연표를 씁니다. 사건은 날짜로, 입도객은 연월로 되어 있으므로 사건 날짜의 연월을 맞춰 붙여야 합니다. 그리고 사건은 하루에 일어나도 영향은 몇 달에 걸쳐 나타나므로 사건이 시작한 달부터 석 달 동안의 YoY 평균을 봅니다.
events.csv에서 kind가 '연휴'인 행은 빼고, 나머지 사건마다
start_date가 속한 달부터 석 달 동안의 외국인 YoY 평균과 내국인 YoY 평균을 구해줘.
YoY를 구할 수 없는 2014년 이전 사건과 아직 데이터가 없는 달의 사건은 빼줘.
외국인 YoY 평균이 낮은 순으로 위에서 8개, 높은 순으로 5개를 표로 보여줘.
이렇게 나와야 합니다. (외국인 YoY가 낮은 쪽)
| 시작 | 사건 | 외국인 YoY | 내국인 YoY |
|---|---|---|---|
| 2020-03 | WHO 코로나19 팬데믹 선언 | -98.2% | -47.4% |
| 2020-03 | 강화된 사회적 거리두기 시행 | -98.2% | -47.4% |
| 2020-02 | 제주 무사증 입국 일시 중단 | -90.1% | -49.1% |
| 2017-11 | 중국 한국 단체관광 일부 허용(베이징·산둥) | -73.7% | +8.2% |
| 2017-03 | 중국 한국 단체관광 금지(한한령) | -64.9% | +11.3% |
| 2020-01 | 코로나19 국내 첫 확진 | -44.9% | -28.7% |
| 2015-05 | 메르스(MERS) 국내 유행 | -40.1% | +26.1% |
| 2022-02 | 러시아 우크라이나 침공 | -9.3% | +12.2% |
1.3의 막대그래프에서 꺾였던 2015년, 2017년, 2020년이 그대로 위에 올라옵니다. 내국인 열을 같이 보면 사건의 성격이 갈립니다. 코로나19는 내국인과 외국인을 함께 줄였고, 한한령과 메르스 때는 외국인만 줄고 내국인은 오히려 늘었습니다. 10장 1절의 분해 분석을 사건에 적용한 것입니다. 같은 달에 시작한 사건은 같은 숫자를 나눠 가지므로, 2020년 3월의 두 사건 중 어느 쪽 영향인지는 이 표만으로 가를 수 없습니다. 2017년 11월 '일부 허용' 뒤에도 외국인이 -73.7%인 것은 허용 발표가 곧 회복은 아니었다는 뜻입니다.
아래쪽 끝도 봐야 합니다. 2023년 6월 엔데믹 전환(+1,115%), 8월 중국 단체관광 재허용(+922%) 옆에 엄청난 숫자가 붙습니다. 외국인이 열 배로 늘었을까요? 작년(2022년) 외국인이 거의 0이었기 때문입니다. 1교시에 배운 기저효과가 실제 데이터에서 이렇게 크게 나타납니다. 또 2016년 7월 사드 배치 결정 옆에는 외국인 +170%가 붙어 있습니다. 결정이 발표된 뒤에도 여덟 달 동안은 중국인이 계속 늘었고, 실제로 줄어든 것은 2017년 3월 단체관광 금지부터였습니다. 사건이 일어난 날과 숫자가 움직인 날은 다를 수 있습니다.
여기서 9장 4절의 상관과 인과를 다시 꺼냅니다. 사건과 숫자가 같은 시기에 움직였다는 것은 "같이 움직였다"는 증거일 뿐, 그 사건 때문이라는 증명은 아닙니다. 2017년 외국인 감소가 단체관광 금지 때문이라고 말하려면 중국인만 줄었는지 확인해야 합니다. 데이터허브의 월간 국가별 외국인 입도객에서 ijto-19.csv를 받아 같은 대화창에 첨부합니다.
첨부한 ijto-19.csv는 국가별 외국인 입도객이야. month, item(국가와 지역), value(명) 열이 있어.
item의 첫 단어가 국가 이름이야. 중국, 일본, 미국의 2016-03, 2016-06, 2017-03, 2017-06 입도객을 표로 보여줘.
이렇게 나와야 합니다.
| 달 | 중국 | 일본 | 미국 |
|---|---|---|---|
| 2016-03 | 199,952 | 3,471 | 2,415 |
| 2016-06 | 330,235 | 3,854 | 2,716 |
| 2017-03 | 87,669 | 2,940 | 3,178 |
| 2017-06 | 33,184 | 6,709 | 3,097 |
2016년 6월 약 33만 명이던 중국인이 2017년 6월에는 약 3.3만 명입니다. 같은 기간 일본인과 미국인은 줄지 않고 오히려 늘었습니다. 중국인만 열 명 중 아홉 명이 사라졌다는 것은 "중국 쪽에서 무슨 일이 있었다"는 가설을 강하게 뒷받침합니다. 사건 연표가 가설을 주고, 쪼갠 데이터가 그 가설을 확인합니다.
진행자 메모: "인과를 확정하려면 무엇이 더 필요할까요?"라고 묻습니다. 다른 지역(서울, 부산)의 중국인 관광객도 같이 줄었는지, 단체가 아닌 개별 관광객은 어땠는지 같은 답이 나오면 충분합니다. 시간이 밀리면 국가별 확인은 시연으로 보여 주고 넘어갑니다.
1.6 직접 해보기
- 1.2의 연도별 표에서 2014년 내국인(895만)과 2015년 내국인(1,104만)을 비교해 봅니다. 1년 만에 200만 명 넘게 늘었습니다. 실제로 늘었을 수도 있고, 집계 방식이 바뀌었을 수도 있습니다. AI에게 "이 차이가 집계 방식 변화일 가능성을 확인하려면 무엇을 봐야 해?"라고 물어봅니다.
- 1.5의 사건 표에서 '전쟁·국제' 사건(우크라이나 침공, 이스라엘-하마스 전쟁, 이스라엘-이란 충돌 등)만 골라 달라고 해 봅니다. 전쟁이 제주 입도객에 뚜렷한 흔적을 남겼나요? 흔적이 없다면 그것도 하나의 발견입니다.
- 다른 AI가 있다면 1.5의 프롬프트를 그대로 넣어 결과가 같은지 대조합니다. 다르게 나왔다면 두 AI에게 각각 "석 달을 어떻게 셌는지" 물어봅니다.
마지막 수정