기계학습에서 데이터 처리는 왜 필요할까?
수집한 데이터를 그대로 기계학습에 사용할 수 없는 이유가 있습니다.
데이터의 처리와 기계학습
데이터 수집
원시 데이터
전처리
결측치·이상치 처리
기계학습
모델 학습 및 예측
전처리(preprocessing)란?
수집한 데이터를 기계학습에 쓸 수 있는 형태로 정리하는 작업을 말합니다. 쓰지 않을 부분을 덜어 내고, 비어 있는 자리를 어떻게 할지 정하고, 유난히 튀는 값을 어떻게 볼지 판단하고, 값의 형태와 범위를 맞추는 일이 모두 여기에 들어갑니다.
다만 모든 데이터에 똑같이 적용되는 정해진 순서나 정답은 없습니다. 무엇을 어떻게 정리할지는 해결하려는 문제와 데이터가 어떻게 만들어졌는지에 따라 달라집니다. 여기서 배우는 것은 방법의 목록이 아니라 고르는 기준입니다.
데이터 전처리 점검표
해결하려는 문제와 데이터의 특성에 따라 필요한 전처리 과정이 다릅니다. 아래 세 가지 질문에 따라 점검하고, 문제가 있는 데이터는 삭제하거나 대체 값을 입력하여 처리합니다. 이상치는 실제로 있었던 값이면 그대로 두기도 합니다.
| 확인 질문 | 필요한 전처리 과정 | 수행할 작업 |
|---|---|---|
| 필요 없는 데이터가 섞여 있는가? | 불필요한 데이터 제거 및 핵심 요소 추출 |
필요하지 않거나 중복된 데이터 삭제 · 문제 해결에 필요한 속성 선별 |
| 데이터에 누락된 값이 있는가? | 결측치(누락된 값) 확인 및 처리 |
결측치 확인 · 결측치 삭제 또는 대체 값 입력 |
| 보통의 범위에서 많이 벗어난 특이한 값들이 있는가? | 이상치(정상 범위를 크게 벗어난 값) 확인 및 처리 |
이상치 확인 · 원인을 보고 삭제·대체·유지 중에서 결정 |
첫 번째 — 쓰지 않을 부분을 덜어 냅니다
공공 데이터 포털이나 관측 장비에서 내려받은 파일은 사람이 읽으라고 만든 부분을 함께 담고 있습니다. 맨 위에 검색 조건이 몇 줄 적혀 있거나, 어느 행에나 같은 값만 들어 있는 열이 붙어 있는 식입니다. 이런 부분은 기계학습이 읽을 표의 모양을 망가뜨리므로 먼저 지웁니다. 그리고 해결하려는 문제에 실제로 쓸 속성만 남깁니다.
지우기 전에 한 번 더 생각합니다. 지금 쓰지 않는 속성이라도 나중에 다른 질문을 던질 때 필요할 수 있습니다. 원본 파일은 그대로 두고 사본을 만들어 지우는 것이 안전합니다.
지금 쓰지 않는 속성이라도 지우기 전에 한 번 더 생각해야 하는 까닭은 무엇인가요?
흩어진 데이터를 하나로 모으기 참고
표 두 개를 붙일 때 무엇이 어긋날 수 있을까?
여러 파일을 하나로 — 데이터 통합
필요한 데이터가 파일 하나에 다 들어 있는 경우는 드뭅니다. 여러 파일에서 필요한 부분을 모아 하나의 표로 만드는 것을 데이터 통합이라고 합니다. 방법은 크게 두 가지입니다.
병합(merge) — 그냥 이어 붙이기
행 병합은 같은 항목을 담은 표를 위아래로 잇습니다. 1학기 관찰 기록과 2학기 관찰 기록을 한 표로 만드는 식입니다.
열 병합은 같은 대상에 다른 항목을 옆으로 붙입니다. 관찰 기록 옆에 그날의 기온을 붙이는 식입니다.
조인(join) — 키를 맞춰 붙이기
두 표에서 같은 것을 가리키는 열을 하나 정하고, 그 값이 같은 줄끼리 짝지어 붙입니다. 이때 기준이 되는 열을 키(key)라고 합니다.
아래 예에서는 관찰일이 키입니다. 학번, 상품 번호처럼 줄을 하나로 특정할 수 있는 값이 키가 됩니다.
실제 데이터로 보기 — 여러 관측소의 날씨를 한 표로
기상청은 전국 관측소에서 측정한 기온·강수량을 날마다 공개합니다. 관측소를 바꿔 내려받아도 고른 항목이 같으면 열 구성이 똑같은 파일이 나옵니다. 서울·부산·제주 파일을 위아래로 이으면 행 병합이 됩니다.
| 지점 | 시간 | 평균기온(°C) |
|---|---|---|
| 서울(108) | 2025-08-01 | 29.1 |
| 부산(159) | 2025-08-01 | 28.3 |
| 제주(184) | 2025-08-01 | 29.0 |
표의 값은 설명을 위한 예시 값입니다.
이을 때 지점 열이 꼭 있어야 합니다. 이 열이 없으면 합친 뒤에 어느 줄이 어느 도시에서 측정한 값인지 알 수 없습니다.
아래 사이트에서 자료형태를 일 자료로 바꾸고, 지점과 요소(평균기온)를 고른 뒤 조회를 누르면 로그인 없이 표를 화면에서 볼 수 있습니다. CSV 파일로 받으려면 로그인해야 합니다.
조인은 한쪽에만 있는 줄을 어떻게 할지에 따라 결과가 달라집니다. 잎 길이를 적은 표(5월 1·2·3일)와 기온을 적은 표(5월 1·3·4일)를 관찰일로 조인해 봅시다.
내부 조인 — 양쪽에 다 있는 줄만
| 관찰일 | 잎 길이 | 기온 |
|---|---|---|
| 5월 1일 | 6.2 | 21.4 |
| 5월 3일 | 7.4 | 24.0 |
빈칸은 생기지 않지만 5월 2일과 4일이 통째로 사라집니다.
외부 조인 — 한쪽을 기준으로 다 남기기
| 관찰일 | 잎 길이 | 기온 |
|---|---|---|
| 5월 1일 | 6.2 | 21.4 |
| 5월 2일 | 6.9 | 빈칸 |
| 5월 3일 | 7.4 | 24.0 |
줄은 지키지만 없던 빈칸이 새로 생깁니다.
어느 쪽이 옳다고 미리 정할 수 없습니다. 기온이 반드시 있어야 하는 분석이라면 내부 조인이 맞고, 관찰한 날을 하루도 빠뜨리면 안 되는 분석이라면 외부 조인이 맞습니다. 다만 외부 조인을 골랐다면 내가 만든 빈칸을 뒤에서 결측치로 처리해야 한다는 것을 기억해야 합니다.
실제 데이터로 보기 — 더운 날 전기를 더 쓸까?
한국전력거래소는 전국에서 하루 동안 쓴 전력량(전력수요량)을 공개합니다. 앞의 날씨 표와 이 전력 표를 날짜를 키로 조인하면, 기온과 전력수요량을 한 줄에 놓고 비교할 수 있습니다.
| 날짜 | 평균기온(°C) | 전력수요량(MWh) |
|---|---|---|
| 2025-05-15 | 18.6 | 1,533,677 |
| 2025-08-01 | 29.1 | 1,745,968 |
기온은 설명을 위한 예시 값입니다.
실제 파일을 받아 보면 그냥 붙지 않습니다. 조인하기 전에 맞춰야 할 것이 있습니다.
- 키의 이름 — 날씨 표는
시간, 전력 표는날짜라고 적혀 있습니다. 이름이 달라도 같은 것을 가리키는 열이라는 것을 사람이 정해 주어야 합니다. - 키의 형식 — 이 두 파일은 날짜를 모두
2025-08-01꼴로 적어 그대로 짝이 지어집니다. 다른 데이터에서 한쪽이20250801처럼 적혀 있다면 컴퓨터는 서로 다른 값으로 보므로, 형식을 하나로 맞춰야 합니다. - 줄의 단위 — 전력 표는 하루가 한 줄이고, 그 줄에
1시부터24시까지 열이 24개 있습니다. 하루 합계로 줄여야 날씨 표의 하루 한 줄과 짝이 맞습니다.
전력 표는 1년 치가 한 파일입니다. 날씨를 여름 석 달만 받아 두었다면 내부 조인은 여름만 남기고, 전력 표를 기준으로 한 외부 조인은 나머지 날의 기온 칸을 빈칸으로 만듭니다. 위에서 본 것과 같은 일입니다.
아래 사이트에서 다운로드를 누르면 로그인 없이 CSV 파일을 받을 수 있습니다. 표의 전력수요량은 이 파일에서 그날의 24시간 값을 더한 것입니다. 파일의 한글은 CP949로 저장되어 있어, 프로그램에 따라 열 이름이 깨져 보이면 인코딩을 CP949(EUC-KR)로 골라 엽니다.
관찰한 날짜를 하루도 빠뜨리지 않고 그래프로 그리고 싶다면, 내부 조인과 외부 조인 중 어느 쪽을 골라야 할까요? 그렇게 고르면 대신 무엇이 생기는지도 함께 말해 보세요.
값이 비어 있으면 어떻게 할까?
지우는 것도, 채우는 것도 공짜가 아닙니다.
결측치(missing value)
있어야 할 자리에 값이 없는 것을 말합니다. 표에서 빈칸으로 남아 있는 자리입니다.
답하지 않아서
설문에서 답하기 곤란한 문항일수록 빈칸이 많아집니다.
기록하지 못해서
측정 장비가 잠시 멈추거나, 그날 관찰을 빠뜨린 경우입니다.
합치는 과정에서
앞에서 본 외부 조인처럼, 표를 합치다가 새로 생기기도 합니다.
먼저 물어야 할 것 — 이 빈칸은 무슨 뜻일까?
같은 빈칸이라도 뜻이 다릅니다. 이것을 확인하지 않고 처리 방법부터 고르면 데이터를 망가뜨립니다.
모르는 빈칸
5월 2일에 잎 길이를 측정하지 못했다면, 그날 잎이 없었다는 뜻이 아니라 얼마였는지 모른다는 뜻입니다. 값을 채운다면 그것은 짐작한 값입니다.
0을 뜻하는 빈칸
「물 준 양」 열이 비어 있는 날은 그날 물을 주지 않았다는 뜻일 수 있습니다. 이때는 0으로 채우는 것이 짐작이 아니라 사실을 되살리는 일입니다.
어느 쪽인지는 데이터를 만든 사람이나 데이터를 설명하는 문서를 보고 확인해야 합니다. 표만 보고는 알 수 없습니다.
처리 방법마다 잃는 것이 있습니다
| 방법 | 어떻게 하나 | 대신 잃는 것 |
|---|---|---|
| 삭제 | 빈칸이 있는 줄을 통째로 뺍니다. 한 속성에만 빈칸이 몰려 있다면 그 열을 통째로 뺄 수도 있습니다. | 쓸 수 있는 데이터가 줄어듭니다. 게다가 빠지는 줄이 한쪽으로 치우쳐 있으면 남은 데이터가 전체를 대표하지 못하게 됩니다. |
| 대푯값으로 대체 | 숫자형은 평균값·중앙값으로, 범주형은 최빈값으로 채웁니다. | 채운 자리가 모두 같은 값이 되어 값들이 가운데로 몰립니다. 실제보다 퍼짐이 좁아 보이고, 그 자리에 있었을 특징이 지워집니다. |
| 정해진 값으로 대체 | 0처럼 미리 정한 값으로 채웁니다. | 빈칸이 정말 그 값을 뜻할 때만 맞습니다. 아니라면 없는 사실을 만들어 넣는 셈입니다. |
| 다른 속성으로 추정 | 함께 움직이는 다른 속성이나 앞뒤 값의 흐름을 보고 그럴듯한 값을 만들어 채웁니다. | 가장 정교해 보이지만 여전히 짐작입니다. 추정에 쓴 관계가 실제와 다르면 오히려 더 그럴듯하게 틀립니다. |
그래서 무엇을 고를까
고르는 기준은 왜 비었는지입니다. 기록을 빠뜨려 생긴 빈칸이 몇 개뿐이라면 그 줄을 빼도 전체 모습은 거의 그대로입니다. 반대로 어떤 조건에서만 빈칸이 생긴다면 (예: 비 오는 날에는 관찰을 걸렀다) 그 줄을 빼는 순간 비 오는 날이 통째로 사라집니다.
빈칸이 지나치게 많다면 처리 방법을 고르기 전에 데이터를 다시 모으는 것도 선택지입니다. 절반이 빈칸인 속성을 무엇으로 채우든, 그 속성은 대부분이 만들어 낸 값이 됩니다.
해 보기: 빈칸의 뜻을 구별하고 처리 방법 정하기
텃밭 관찰 동아리가 한 달 동안 적은 기록입니다. 오렌지(Orange)의 Feature Statistics 위젯을 연결하면 속성마다 빈칸이 몇 개인지 한눈에 보입니다. 아래 표의 빈칸 뜻을 구별하고 처리 방법을 정해 봅시다.
| 속성 | 빈칸 | 빈칸의 뜻과 처리 방법 |
|---|---|---|
| 잎 길이 | 3일치 | 관찰을 빠뜨린 날 — 모르는 빈칸입니다. 날마다 조금씩 자라는 값이므로 앞뒤 날의 값 사이로 추정해 채우거나, 그 3일을 빼고 봅니다. 어느 쪽이든 그 3일의 값은 실제로 측정한 값이 아님을 기억합니다. |
| 물 준 양 | 11일치 | 물을 주지 않은 날은 아무것도 적지 않았습니다 — 0을 뜻하는 빈칸입니다. 0으로 채웁니다. 여기서 평균으로 채우면 물을 주지 않은 날에도 물을 준 것이 됩니다. |
| 낮 최고 기온 | 없음 | 처리할 것이 없습니다. |
| 흙 습도 | 없음 | 처리할 것이 없습니다. |
오렌지에서는 [Transform] → Preprocess 위젯의 Impute Missing Values로 삭제와 대체를 고를 수 있고, 속성마다 다른 방법을 쓰려면 Impute 위젯을 씁니다. 위 표처럼 속성마다 뜻이 다르면 하나의 방법을 전체에 걸어서는 안 됩니다.
학급 설문의 「하루 간식 비용」 칸이 비어 있는 학생이 여럿입니다. 이 빈칸을 모두 0으로 채우기 전에 무엇을 먼저 확인해야 할까요?
혼자 튀는 값은 어떻게 할까?
찾아낸 이상치를 어떻게 처리할지 정합니다.
이상치(outlier)
다른 값들이 모여 있는 범위에서 혼자 멀리 떨어져 있는 값을 말합니다. 산점도에서는 점들이 이루는 흐름과 동떨어져 찍힌 점이고, 상자 그림에서는 이상치 기준 바깥에 따로 찍힌 점입니다.
찾는 방법
- 그림으로 — 상자 그림은 속성 하나의 튀는 값을, 산점도는 두 속성의 관계에서 흐름을 벗어난 점을 보여 줍니다.
- 계산으로 — 상자 그림의 이상치 기준은 아래쪽 이상치 기준 = Q1 − 1.5 × IQR, 위쪽 이상치 기준 = Q3 + 1.5 × IQR로 정합니다. 여기서 1.5는 계산으로 나온 값이 아니라 널리 쓰이게 된 관례라서, 이 값을 바꾸면 이상치로 잡히는 개수도 달라집니다.
- 도구로 — 오렌지의 Outliers 위젯은 탐지 방법과 민감도를 골라 튀는 값을 표시해 줍니다. 민감도를 올리면 더 많이 잡히므로, 잡힌 개수는 데이터의 성질이자 내가 정한 설정의 결과이기도 합니다.
이상치가 곧 잘못된 값이라는 뜻은 아닙니다. 잘못 적어서 생긴 값일 수도 있고, 실제로 그런 일이 있었기 때문에 남은 값일 수도 있습니다. 그래서 찾아낸 다음에 어떻게 할지를 따로 판단해야 합니다.
선택은 셋입니다
지운다
있을 수 없는 값일 때 고릅니다. 학년 칸에 7이 적혀 있다면 통계를 내 보지 않아도 잘못된 값입니다.
대가 — 진짜로 일어난 일을 지워 버릴 수 있습니다. 되돌릴 수 없습니다.
고친다
원래 값을 짐작할 수 있을 때 고릅니다. 앞뒤 값의 중간으로 바꾸거나 대푯값으로 바꿉니다.
대가 — 바꿔 넣은 값은 측정한 값이 아닙니다. 원본에는 반드시 기록을 남깁니다.
그대로 둔다
실제로 일어난 일일 때 고릅니다. 폭우가 쏟아진 날의 강수량, 키가 아주 큰 운동선수의 기록이 그렇습니다.
대가 — 값 하나가 평균과 그래프를 크게 끌어당길 수 있습니다.
고르는 기준은 「왜 튀었는가」입니다
같은 값이라도 기록하는 과정에서 생긴 오류인지 실제로 일어난 드문 일인지에 따라 답이 달라집니다. 그리고 그 판단은 통계가 해 주지 않습니다. 그 분야를 아는 사람이 데이터가 어떻게 만들어졌는지를 검토해야 합니다.
이상치 기준을 벗어났다는 것만으로 지우는 습관은 위험합니다. 올림픽의 세계 신기록은 대개 이상치로 잡히지만, 지워서는 안 되는 값입니다.
사례 — 텃밭 관찰 기록의 잎 길이 0.0 cm
산점도에서 흐름과 동떨어져 찍힌 점입니다. 날마다 조금씩 자라던 잎 길이가 어느 하루만 0.0 cm로 뚝 떨어져 찍혔습니다. 이제 어떻게 할지 정할 차례입니다.
- 있을 수 있는 값인가? 자라던 상추가 하루 만에 사라지고 다음 날 다시 원래 길이로 돌아올 수는 없습니다.
- 왜 생겼을까? 그날 측정하지 못한 것을 빈칸 대신 0으로 적어 두었을 가능성이 큽니다.
- 그러면 이것은 결측치입니다. 0이라는 값이 아니라 모른다는 뜻이므로, 빈칸으로 되돌린 뒤 「값이 비어 있으면 어떻게 할까?」 절의 방법으로 처리합니다.
이상치와 결측치는 늘 따로 있는 것이 아닙니다. 비어 있어야 할 자리에 값이 적혀 있으면, 그것은 이상치처럼 보이는 결측치입니다.
더 알아보기 — 이상치를 찾는 것 자체가 목적일 때
지금까지는 분석을 방해하는 값을 걸러 내려고 이상치를 찾았습니다. 그런데 튀는 값을 찾아내는 일 자체가 목적인 경우도 있습니다. 평소의 패턴에서 벗어난 것을 찾아내는 일을 이상 탐지(anomaly detection)라고 합니다.
- 늘 쓰던 곳과 전혀 다른 지역에서 갑자기 결제가 일어나면 도난 카드일 가능성을 의심합니다.
- 공장 기계의 진동이 평소 범위를 벗어나면 고장 징후로 보고 미리 점검합니다.
같은 값을 두고 한쪽에서는 지우고 다른 쪽에서는 그것만 찾습니다. 무엇을 하려는지가 처리 방법을 정합니다.
동네 마라톤 대회 기록표에 2시간 10분 기록이 하나 있고 나머지는 모두 3시간을 넘습니다. 이 값을 지울지, 고칠지, 그대로 둘지 정하려면 무엇을 알아야 할까요?
내 데이터에 직접 적용해 보기
내가 모은 데이터라면 무엇부터 처리해야 할까?
해 보기(선택): 나만의 데이터 전처리하기
자신이 관심 있는 분야에서 수집한 데이터를 떠올리며, 전처리가 필요한 항목을 점검하고 어떤 전처리 과정을 수행할지 정리해 봅시다. 왜 그렇게 정했는지도 함께 적습니다.
| 점검 항목 | 해당 여부 (○, ×) |
|---|---|
| 필요 없는 데이터가 섞여 있는가? | |
| 데이터에 누락된 값이 있는가? | |
| 보통의 범위에서 많이 벗어난 값이 있는가? |
| 전처리 과정 | 수행할 내용과 그렇게 정한 이유 |
|---|---|
| 불필요한 데이터 제거 및 핵심 요소 추출 |
|
| 결측치 처리 | |
| 이상치 처리 |
| 전처리 과정 | 수행할 내용과 그렇게 정한 이유 |
|---|---|
| 불필요한 데이터 제거 | 맨 위의 검색 조건 줄과, 어느 행에나 같은 값만 들어 있는 「지점명」 열을 지웠다. 잎이 자라는 정도를 보려는 것이므로 관찰일과 잎 길이, 물 준 양, 기온만 남겼다. |
| 결측치 처리 | 「물 준 양」의 빈칸은 물을 주지 않은 날을 뜻하므로 0으로 채웠다. 「잎 길이」의 빈칸 3일치는 측정하지 못한 날이라 뜻이 다르므로, 앞뒤 값 사이로 추정해 채우고 추정한 날짜를 따로 적어 두었다. |
| 이상치 처리 | 잎 길이 0.0 cm는 측정하지 못한 날을 0으로 적은 것으로 보여 빈칸으로 되돌린 뒤 결측치로 처리했다. 비가 많이 온 날의 흙 습도가 유난히 높게 잡혔지만 실제로 있었던 일이므로 그대로 두었다. |
우리 반 100m 달리기 기록에서 한 명만 유난히 빠른 기록이 나왔습니다. 이 값을 지울지, 고칠지, 그대로 둘지 정하려면 무엇을 먼저 확인해야 할까요?
값의 범위와 형태를 어떻게 맞출까?
단위가 다른 속성, 숫자가 아닌 속성을 함께 쓰려면 손질이 더 필요합니다.
자가 다르면 비교가 어긋납니다
우리 반 데이터에 통학 거리(0~5000 m)와 하루 공부 시간(0~6시간)이 있다고 합시다. 두 학생의 통학 거리가 400 m 차이 나고 공부 시간이 3시간 차이 난다면, 숫자만 보면 통학 거리 쪽이 130배 넘게 커 보입니다. 그런데 전체 폭에서 보면 통학 거리는 8%, 공부 시간은 50% 차이입니다. 서로 다른 자로 측정한 값을 그대로 빼서 비교했기 때문에 순서가 뒤집힌 것입니다.
정규화(normalization)
그 속성의 가장 작은 값을 0, 가장 큰 값을 1로 두고 나머지 값을 그 사이의 위치로 바꾸는 방법입니다. 가장 작은 값과 가장 큰 값을 기준으로 삼으므로 최소-최대 정규화라고도 부릅니다. 바뀐 값은 전체 폭에서 어느 지점에 있는가를 뜻합니다.
예를 들어 통학 거리 400 m → (400 − 0) ÷ 5000 = 0.08
모든 값이 0과 1 사이에 들어옵니다. 다만 혼자 아주 큰 값 하나가 남아 있으면 나머지가 0 근처로 몰려 버립니다.
표준화(standardization)
그 속성의 평균을 0, 표준 편차를 1로 두고 값을 다시 나타내는 방법입니다. 표준 편차는 값들이 평균에서 흩어진 정도를 나타내는 수입니다. 바뀐 값은 평균에서 표준 편차 몇 개만큼 떨어져 있는가를 뜻합니다.
예를 들어 평균보다 표준 편차 2개만큼 큰 값 → 2
위아래 한계가 정해져 있지 않습니다. 값이 0과 1 사이로 들어오지 않는 대신, 혼자 큰 값 하나에 덜 휘둘립니다.
둘 다 모든 값에서 같은 수를 빼고 같은 수로 나누는 것일 뿐입니다. 값의 위치와 간격만 바뀌고 분포의 모양은 그대로입니다. 한쪽으로 치우친 데이터는 정규화해도 여전히 치우쳐 있습니다. 자를 바꾸는 일이지 데이터를 바꾸는 일이 아닙니다.
언제나 해야 하는 것은 아닙니다
두 데이터가 얼마나 떨어져 있는지를 계산해서 판단하는 방법에서는 속성마다 자가 다르다면 반드시 필요합니다. 거리를 계산하려면 자가 같아야 하기 때문입니다. k-최근접 이웃, k-평균 군집, 서포트 벡터 머신이 그런 방법입니다. 이름까지 지금 외울 필요는 없고, 거리를 계산하는 방법이라는 것만 기억하면 됩니다.
반대로 거리를 계산하지 않는 방법은 덜 예민합니다. 선형 회귀는 속성마다 곱해지는 수를 따로 찾아내므로 단위 차이가 그 수에 흡수됩니다. 의사결정트리는 값의 크기가 아니라 어느 지점에서 나눌지만 보므로 범위를 맞춰도 결과가 같습니다.
또 값의 범위 자체에 뜻이 있는 속성(시험 점수의 만점, 확률처럼 0~1인 값)은 범위를 바꾸면 원래 의미를 읽기 어려워집니다. 무조건 하는 것이 아니라 쓸 방법에 맞춰 고릅니다.
순서가 있습니다 — 이상치를 먼저
이상치를 그대로 둔 채 최소-최대 정규화를 하면, 그 값 하나가 「가장 큰 값」이 되어 나머지 값이 전부 0 근처로 눌립니다. 이상치를 어떻게 할지 먼저 정하고 범위를 맞춥니다.
기준은 한 번만 정합니다
정규화에 쓴 가장 작은 값·가장 큰 값, 표준화에 쓴 평균·표준 편차는 모델을 학습시킬 때 쓴 데이터에서 정하고, 나중에 들어오는 새 데이터에도 그 값을 그대로 씁니다. 새 데이터로 기준을 다시 정하면 같은 값이 다른 숫자가 되어 버립니다. 모델이 처음 보는 데이터에서 얼마나 잘 맞히는지 확인하려면 새 데이터도 학습 때와 같은 자로 바꿔야 하기 때문입니다.
범위를 맞추는 일이 필요한 방법과 그렇지 않은 방법은 무엇이 다른가요?
숫자가 아닌 값을 숫자로
이름으로 된 값은 어떻게 계산에 넣을까?
숫자가 아닌 값은 숫자로 — 범주형 변수의 인코딩
통학 수단(도보·버스·지하철), 옷 사이즈(S·M·L)처럼 값이 이름으로 되어 있는 속성을 범주형 변수라고 합니다. 기계학습 모델은 숫자로 계산하므로 이런 값을 숫자로 바꿔야 하는데, 이 작업을 인코딩이라고 합니다.
더미 인코딩(dummy encoding)
범주마다 열을 하나씩 새로 만들고, 그 범주에 속하면 1, 아니면 0을 적습니다. 범주 사이에 순서를 만들지 않습니다.
범주가 많으면 열이 그만큼 늘어납니다.
순서 인코딩(ordinal encoding)
이미 순서를 가진 범주를 그 순서대로 정수로 바꿉니다. 열이 하나로 유지됩니다.
바뀐 숫자는 순서만 나타냅니다. M이 S의 두 배라는 뜻은 아닙니다.
둘을 바꿔 쓰면 없는 순서가 생깁니다. 통학 수단에 도보 = 1, 버스 = 2, 지하철 = 3을 붙이면 모델은 「지하철이 도보보다 크다」, 「버스는 도보와 지하철의 가운데」라고 읽습니다. 순서가 없는 범주에는 더미 인코딩을 씁니다. 순서가 있는지 없는지는 그 값이 무엇을 가리키는지를 보고 사람이 판단해야 합니다.
오렌지에서는 [Transform] → Preprocess 위젯의 Normalize Features로 정규화와 표준화를, [Transform] → Continuize 위젯으로 더미 인코딩과 순서 인코딩을 할 수 있습니다.
혈액형(A·B·O·AB)을 A = 1, B = 2, O = 3, AB = 4로 바꾸면 무엇이 잘못될까요? 어떤 인코딩을 써야 할지도 함께 말해 보세요.
오렌지(Orange) 실습 — 이미지 데이터를 어떻게 처리할까?
오렌지(Orange) 프로그램으로 총 5단계에 걸쳐 이미지 데이터를 수집, 입력, 확인, 전처리하는 과정을 실습합니다.
여기까지는 표로 된 데이터였습니다
앞에서 다룬 것은 행과 열이 있는 정형 데이터였습니다. 그런데 이미지·음성·글처럼 표에 담기지 않는 비정형 데이터도 기계학습에 씁니다. 이때는 전처리에서 할 일이 달라집니다.
| 구분 | 정형 데이터 | 비정형 데이터 |
|---|---|---|
| 예시 | 시험 성적, 관찰 기록 | 이미지, 음성, 텍스트 |
| 값이 없을 때 | 빈칸의 뜻을 확인한 뒤 삭제하거나 대체 | 알아보기 어려운 파일을 빼거나 다시 모음 |
| 숫자로 바꾸기 | 이미 숫자거나 범주형이라 인코딩만 하면 됨 | 숫자 배열로 바꾸는 과정(임베딩)이 따로 필요 |
| 주로 하는 일 | 결측치·이상치 처리, 정규화·표준화 | 크기 맞추기, 임베딩 |
아래 실습에서는 이미지를 기계학습에 쓸 수 있는 형태로 바꿔 봅니다.
이미지 데이터셋 다운로드
이미지 데이터셋를 제공하는 캐글(Kaggle) 사이트에서 분리수거(재활용) 이미지 데이터를 다운로드합니다.
검색창에 Bottles and Cans Images를 입력하여 데이터셋를 찾습니다.
Bottles and Cans Images Dataset
페트병 용량별(500ml~2,000ml) 이미지와 캔 이미지로 구성된 총 1,075개의 이미지(단위 cl은 1cl당 10ml)
폴더 구성
- train data/ — 학습용 이미지(pet, can 하위 폴더)
- test data/ — 테스트용 이미지(pet, can 하위 폴더)
전처리 기준
- bottle_50cl과 can 이미지만 선택하고 나머지는 제거
- 화질이 낮거나 식별이 어려운 이미지 삭제
- 파일명을 pet1, pet2 … / can1, can2 …로 정리
PET (페트병)
bottle_50cl 이미지
Can (캔)
can 이미지
선택한 이미지 중 페트병(bottle_50cl) 데이터가 240개, 캔 데이터가 56개로 개수 차이가 큽니다. 그대로 학습하면 페트병 쪽으로 편향된 모델이 만들어질 수 있으므로, 두 범주의 데이터 수를 비슷하게 맞춘 뒤 학습용이 더 많도록 대략 7:3으로 train data 폴더와 test data 폴더에 나누어 저장합니다. 정확한 개수는 남긴 이미지 수에 따라 달라집니다.
Image Analytics 설치
오렌지 프로그램 상단 메뉴 [Options] → [Add-ons]에서
Image Analytics를 설치합니다.
설치 후 프로그램을 종료하고 다시 실행해야 합니다.
Image Analytics 위젯 목록 (5개)
Import Images
이미지 폴더 불러오기
Image Viewer
이미지 시각적 확인
Image Embedding
이미지 → 숫자 배열 변환
Image Grid
격자 형태로 이미지 보기
Save Images
이미지 저장
실습에 쓸 이미지 데이터셋를 내려받고 도구를 준비하는 과정에서 무엇을 확인해야 하나요?
오렌지(Orange) 실습 — 이미지 불러오고 확인하기
파일을 읽어 들이면 표에는 무엇이 담길까?
이미지 데이터 입력 및 확인
① Import Images 위젯으로 폴더 업로드
[Image Analytics] 목록에서 Import Images 위젯을 선택하고 train data 폴더를 업로드합니다.
위젯의 Info 창에 불러온 이미지 수와 2 Categories가 표시되면 성공입니다. 여기서는 train data 폴더에 84장을 넣은 경우로 설명합니다.
확인: 84 images / 2 categories(pet, can)
② Image Viewer 위젯으로 이미지 확인
Image Viewer 위젯을 선택한 후 드래그하여 Import Images 위젯과 연결합니다.
위젯을 열면 84개의 페트병·캔 이미지가 잘 입력되어 있는지 확인할 수 있습니다.
③ Data Table 위젯으로 속성 확인
[Data] 목록에서 Data Table 위젯을 선택하고 Import Images 위젯과 연결합니다.
84개 이미지 데이터가 테이블 형태로 표현됩니다.
| 속성(컬럼) | 내용 |
|---|---|
category |
범주 (pet / can) |
image name |
이미지 파일 이름 (pet1, pet2 … / can1, can2 …) |
size / width / height |
이미지 파일 크기와 가로·세로 픽셀 수(파일마다 다름) |
category는 폴더 이름에서 온 정답(범주)이고, 나머지 값들은 이미지 데이터의 속성(특징)이 아니라 각 이미지에 대한 사전 정보(메타데이터)입니다.
메타데이터(Metadata)란?
데이터에 대한 데이터를 말합니다.
예를 들어, 스마트폰으로 사진을 찍으면 촬영 시간, 해상도, 크기 등의 정보가 사진과 함께 저장되는데,
이러한 정보가 바로 메타데이터입니다.
Data Table에서 확인한 image name, size, width, height는 모두 이미지의 메타데이터입니다.
불러온 이미지 표에서 파일 이름과 크기 같은 항목은 무엇이라고 부르나요?
이미지를 숫자로 바꾸기
그림 파일을 기계학습에 어떻게 넣을까?
기계학습을 위한 전처리 — 이미지 임베딩
이미지 데이터는 비정형 데이터이므로 기계학습에 바로 사용할 수 없습니다.
Image Embedding 위젯을 통해 이미지를 숫자 배열로 변환하는 전처리를 수행합니다.
임베딩(Embedding)이란?
이미지처럼 표에 담기지 않는 데이터를 모델이 계산할 수 있는 숫자의 배열로 바꾸는 것입니다.
이미지의 픽셀 정보, 색상, 패턴 등이 숫자로 표현됩니다.
오렌지 프로그램 전처리 워크플로우
Import Images
Data + Images
Image Embedding
Embeddings + Data
Data Table
변환된 속성 확인
Embedder 설정 — VGG-16 선택
Image Embedding 위젯에서 데이터의 특성에 적합한 Embedder를 선택합니다. 여기서는 이미지넷(ImageNet)에서 훈련된 합성곱 신경망(CNN, 사진 인식에 널리 쓰이는 신경망 구조)을 적용한 16계층 이미지 인식 모델 VGG-16을 선택하여 임베딩을 수행합니다.
| Embedder | 설명 |
|---|---|
| SqueezeNet | 이미지넷에서 훈련된 작고 빠른 이미지 인식 모델 |
| Inception v3 | 이미지넷 데이터셋에서 훈련된 이미지 인식 모델 |
| VGG-16/19 | 이미지넷에서 훈련된 합성곱 신경망을 적용한 16/19계층 이미지 인식 모델 |
| Painters | 예술 작품의 그림에서 화가를 예측하도록 훈련된 모델 |
| DeepLoc | 효모나 세포 이미지를 분석하도록 훈련된 모델 |
| openface | 사람의 얼굴을 분석하도록 훈련된 모델 |
전처리 결과 확인
새로운 Data Table을 열어 보면 앞서 확인한 테이블에 임베딩된 숫자 값(속성)이 추가되어 이미지가 컴퓨터가 이해할 수 있는 숫자 벡터로 변환된 것을 확인할 수 있습니다.
전처리 결과 요약
84
입력 이미지 수
pet + can 2개 범주
임베딩 벡터
변환된 속성
이미지 → 숫자 배열
VGG-16
사용 임베더
합성곱 신경망(CNN)
이처럼 전처리한 이미지 데이터는 다양한 기계학습 모델에 사용할 수 있습니다.
강아지 사진 100장을 Image Embedding 위젯에 넣었더니 표에 숫자 열이 수백 개 생겼습니다. 사진 한 장은 이 표에서 무엇이 되었을까요?
탐구활동 — 스스로 해결하기
내가 직접 모은 데이터에는 어떤 전처리가 필요할까?
새로운 이미지 데이터를 직접 수집하고 전처리 과정을 기록해 봅시다.
활동 과제
캐글(kaggle.com/datasets)이나
UCI 기계학습 저장소(archive.ics.uci.edu)에서
새로운 이미지 데이터를 수집한 후,
수집한 데이터와 전처리 방법을 아래에 기록해 보세요.
| 항목 | 내용 기록 |
|---|---|
| 수집한 데이터 | |
| 전처리 방법 |
흉부 X선 이미지(Chest X-Ray) — 폐렴 여부 분류용 데이터셋
5,863개 X선 이미지 / 2개 범주(정상, 폐렴)
오렌지 프로그램에서 이미지 데이터를 업로드하고 Image Embedding 위젯을 이용해 기계학습에 적합한 형태로 변환하는 과정을 실시하고, Data Table에서 전처리된 내용을 확인하였다.
AI Hub — 한국형 AI 데이터
한국지능정보사회진흥원(NIA)에서 운영하는 AI Hub(aihub.or.kr)에 방문하면
대용량 인공지능 학습용 데이터를 신청해 받을 수 있습니다.
회원 가입 후 희망하는 데이터를 신청하여 승인받으면 다운로드할 수 있습니다.
확인 퀴즈
배운 내용을 확인해 봅시다.
다음 중 결측치의 올바른 정의는 무엇인가요?
기계학습에서 데이터 전처리가 필요한 이유로 가장 적절한 것은?
오렌지 프로그램에서 Image Embedding 위젯의 역할로 가장 적절한 것은?
데이터 값을 0에서 1 사이로 변환하여 모든 값이 같은 범위에 있도록 만드는 방법은?
옷 사이즈 S → 1, M → 2, L → 3처럼 순서가 있는 범주형 변수를 정수로 변환하는 방법은?
데이터에서 이상치를 발견했을 때 가장 적절한 태도는?
속성의 값 범위를 맞추는 일(정규화·표준화)에 대한 설명으로 옳은 것은?
핵심 정리
모아 온 데이터를 기계학습에 쓸 수 있는 형태로 정리하는 일이 전처리입니다. 쓰지 않을 부분을 덜어 내고, 여러 파일을 합치고, 빈칸과 튀는 값을 어떻게 할지 정하고, 값의 범위와 형태를 맞춥니다. 모든 데이터에 통하는 정해진 순서나 정답은 없습니다. 방법마다 잃는 것이 있으므로, 왜 비었는지·왜 튀는지·무엇에 쓸 데이터인지를 보고 그때그때 고릅니다.
결측치
- 있어야 할 자리에 값이 없는 것
- 모르는 빈칸과 0을 뜻하는 빈칸을 먼저 구분한다
- 삭제 → 데이터를 잃고, 대푯값 대체 → 값이 가운데로 몰린다
이상치
- 혼자 멀리 떨어져 있는 값
- 이상치가 곧 잘못된 값이라는 뜻은 아니다
- 왜 튀었는지 보고 지울지·고칠지·둘지 정한다
범위와 형태 맞추기
- 정규화 — 가장 작은 값 0, 가장 큰 값 1로 두고 그 사이 위치로
- 표준화 — 평균 0, 표준 편차 1로 두고 평균에서 떨어진 정도로
- 거리를 계산하는 방법에는 필요하고, 언제나 하는 것은 아니다
데이터 통합
- 병합 — 행이나 열로 이어 붙이기
- 조인 — 키를 맞춰 붙이기
- 외부 조인은 없던 빈칸을 새로 만든다
범주형 인코딩
- 더미 인코딩 — 범주마다 열을 만들어 1과 0으로
- 순서 인코딩 — 이미 순서를 가진 범주를 정수로
- 순서 없는 범주에 순서를 붙이면 없는 순서가 생긴다
비정형 데이터
- 이미지는 표에 담기지 않는다
- Import Images로 불러오고 Image Embedding으로 변환
- 이미지 한 장 → 숫자 배열(벡터)