데이터(Data)
데이터는 현대 사회에서 가장 중요한 자원 중 하나로 자리잡고 있다. 예를 들어 기업은 데이터에 기반한 의사결정을 통해 회사 고유의 경쟁력을 강화하고, 연구자들은 데이터 분석을 통해 새로운 인사이트를 얻으며, 데이터 분석의 보편화로 개인들도 데이터 기반 도구를 활용해 일상생활 속 여러 문제를 개선하고 있다. 하지만 데이터는 그 자체로서의 가치를 가지기 보다, 올바르게 가공되거나 정제될 때 그 가치가 드러난다.
데이터는 일상 혹은 연구 상황 등에서 마주할 수 있는 관찰 가능한 모든 정량적, 비정량적 수치를 포함한다. 좁은 의미로는 병원에서의 환자 건강 수치나 CT 이미지 데이터 등이 데이터가 될 수 있으며, 광범위하게는 여러 통계 자료를 포함하기도 한다. 본 글에서 초점을 맞추는 부분은 '데이터의 수집'이 아닌 '데이터의 가공 및 변형'이다. 즉, 수집한 raw data를 분석 가능한 형태, 혹은 의미 있는 해석을 만들어 낼 수 있는 형태로 변형하는 방법에 대해 다루고자 한다.
앞으로 데이터 분석에서 많이 사용하게 될 용어에 대해 따로 설명하고자 한다. 먼저 데이터가 어떻게 구성되어 있는지 확인해보면 다음과 같다.
- Data Point : 데이터를 구성하고 있는 한 행(row), 데이터 1개를 '데이터 포인트'라고 부른다. (Ex. {P00001, 35, 141, 50.1}은 데이터포인트 1이다.)
- Feature : 데이터 포인트를 구성하는 원소, 위 데이터에서 특성은 id, 나이, 심박수, 몸무게이다.
- Data : data point들의 집합을 데이터라고 한다. 위 데이터는 6개의 데이터 포인트로 구성되어 있다.
이제 주어진 데이터를 바탕으로 문제를 정의하고 이를 해결하는데에 머신러닝을 적용하는 식으로 문제 해결이 이루어질 것이다. 위 데이터를 바탕으로 문제를 정의하면 다음과 같이 구성해볼 수 있다.
Ex 1) 환자의 나이와 몸무게만을 이용해 심박수를 예측할 수 있을까?
Ex 2) 환자의 몸무게와 심박수를 분석해 나이를 추정할 수 있을까?
Ex 3) 환자의 나이, 몸무게, 심박수를 통해 환자의 심장 질환 여부를 예측할 수 있을까?
Ex 1, Ex 2의 경우에는 주어진 데이터만을 이용해 문제를 정의할 수 있다. 이 때 예측할 특성은 Ex1에서는 심박수, Ex2에서는 나이가 되는데, 이처럼 예측할 특성을 label 혹은 target variable(종속변수, Y)이라고 부른다. 또한 예측을 위해 사용한 데이터는 Ex1에서 나이와 몸무게, Ex2에서는 몸무게와 심박수가 되는데, 이들을 각각 attribute variable(독립변수, X)라고 부른다.
함수의 관점에서 보면 이해가 쉽다. Ex1의 경우에는 나이와 몸무게가 attribute variable, 심박수가 target variable이므로,
데이터 포인트 i의 나이가 $x_{i1}$, 몸무게가 $x_{i2}$, 심박수가 $y_{i1}$이라면 $y_{i1} = h(x_{i1}, x_{i2})$을 만족하는 함수를 찾는 것이라고 볼 수 있다. 따라서 attribute variable이 독립변수(X), target variable이 종속변수(Y)라고 불린다.
Data Analysis 1. Outlier & Missing Value
전통적인(conventional) 데이터의 품질은 정확성, 일관성, 신뢰성 등의 기준으로 결정되어 왔다. 정확성이라는 것은 해당 데이터가 목적에 얼마나 부합하는지, 검증하고자 하는 가설을 명확하게 설명 가능한지를 의미한다. 일관성은 해당 데이터가 Outlier(이상치)가 없어 일관된 특성을 띠고 있는지에 해당한다. 마지막으로 신뢰성은 Missing Value(결측치)의 수가 너무 많아 데이터 자체에 대한 정확성을 신뢰할 수 있는지 여부를 나타낸다.
Outlier(이상치)는 데이터셋에서 다른 데이터 포인트들과 다른 경향성(Tendency)을 띠고 있는 데이터 포인트를 말한다.
발생 원인 | 데이터 수집 오류, 데이터 변환 과정에서의 오류, 샘플링 에러 등 |
발생하는 문제점 | 통계량에서 오류 발생(데이터 평균 등의 수치 왜곡), 패턴을 훼손, Robustness의 감소 |
위 그림에서 우측 하단에 존재하는 붉은 색의 데이터가 바로 이상치이다.(사실 총 3개의 이상치가 있다.) 몸무게가 음수로 측정될 수 없다는 것이 그 1번째 근거이다. 만약 수치상으로 오류가 발견되지 않더라도(몸무게가 실제로 가능한 범위 내의 값이더라도) 다른 데이터 포인트들과 경향성을 달리한다면, 이상치라고 의심할 수 있다.
Missing Value(결측치)는 데이터 포인트의 특성 값 일부가 존재하지 않는 것을 말한다. 예를 들어 전산 상의 오류로 700개의 데이터 포인트 중, 30여개의 데이터 포인트의 '나이' 특성 값이 기재되지 않는 경우가 이에 해당한다. 이 때는 두 가지 결정을 내릴 수 있다. 첫 번째로는 결측치가 존재하는 데이터 포인트를 데이터 분석에서 배제하는 방법, 두 번째로는 결측치를 예상하여 채우는 방법이다.
발생 원인 | survey 등의 데이터 수집에서 비응답, 개인정보 보안에 따른 결측, 데이터 변환 과정 오류 |
발생하는 문제점 | 데이터의 편향(bias) 발생 및 불균형, 신뢰성의 감소 |
따라서 결측치가 너무 많다면 임의적으로 데이터 포인트 자체를 분석에서 배제시킬 수 있다. 혹은 해당 결측치를 임의의 값으로 대체하는 방법이 있는데 일반적으로 해당 특성의 평균이나 최빈값으로 대체한다. 예를 들어 heart_rate에 존재하는 P00003의 결측치를 채우기 위해서는 전체 heart_rate 특성의 평균을 계산하고, 이 값으로 P00003의 결측치를 채우는 것이다.
Data Analysis 2. Data Preprocessing
데이터를 수집하는 것이 끝이 아니라 데이터를 입맛에 맞게 가공하는 과정도 중요하다. 머신러닝 모델에 적합하게 데이터를 전처리하는 것이 중요한데, 그 과정을 데이터 전처리(preprocessing)이라고 한다. 위에서 언급한 결측치 제거, 이상치 감지 등도 데이터 전처리의 일부 과정이다. 이제는 특성 정규화와 변형, 특성 공학에 대해 살펴보고자 한다.
비정형 데이터의 변형
비정형 데이터의 일종인 categorical data(범주형 데이터, 숫자가 아닌 데이터)를 변형하는 방법에 대해 살펴보자. 일반적으로 머신러닝 모델은 숫자형 데이터(numerical data) 혹은 숫자들의 집합으로 이루어진 벡터(embedding vector라고 부른다)를 입력으로 받아 처리한다.
예를 들어 데이터셋에 고객의 등급(Class I, Class II, Class III)이 존재한다면 이렇게 문자로 되어 있는 등급 특성을 숫자로 변환해주어야 하는 것이다. 하지만 무턱대고 Class I을 1, Class II를 2, Class III을 3으로 간주해서 변환해도 괜찮을까? 답은 그렇지 않다. 1 < 3을 만족하는데 그렇다면 Class III이 Class I보다 좋은가? Class I과 II의 차이는(2-1) Class II와 III의 차이와 동일한가?(3-2) 이는 고객의 등급을 매기는 방식에 따라 다를 것이다. 따라서 단순히 정수로 표현하는 것은 많은 해석 가능성을 잃게 될 가능성이 있다.
따라서 원-핫 인코딩(one-hot encoding)이라는 기법을 통해 비정형 데이터를 변형하게 된다. Class I, Class II Class III를 다음과 같이 변형하는 것이다.
각 클래스를 숫자로 표현하는 것이 아니라, Class I에 해당하는 여부를 0 혹은 1로 표현함으로써 기존에 I, II, III을 각각 1, 2, 3으로 표현하려고 했던 시도를, I, II, III을 각각 (1, 0, 0), (0, 1, 0), (0, 0, 1)의 벡터로 표현하는 방법을 말한다. 이 방법이 조금 더 해석 가능성을 풍부하게 만들 수 있다.
이 뿐만 아니라 시간대(아침, 오전, 오후, 저녁)에 대한 특성도 아침 1, 오전 2, 오후 3, 저녁 4가 아니라, 각각의 클래스에 해당하는 특성을 만들어서(아침인가? 오전인가? 등) 0과 1로 상태를 표현할 수 있다.
특성의 정규화(Data Scaling)
특성의 정규화는 특성값을 임의의 구간에 존재하도록 하거나, 표준 정규분포 형태를 띠도록 설정하는 것이다. 이것이 왜 필요한지는 아래 예시를 통해 이해할 수 있다.
환자가 암 종양을 가지고 있는지 여부를 차트를 분석하여 확인하고자 한다. 수치 A의 범위는 $10^{-5}$ ~ $10^{-3}$이고 수치 B의 범위는 $10$ ~ $90$이다. 수치 A와 B를 attribute variable로 하여 환자의 암 종양 존재 여부를 판별하고자 한다.
이 상황에서 발생하는 문제점은 수치 A의 스케일과 수치 B의 스케일이 다르기 때문에 환자의 암 종양 존재 여부를 결정짓는 과정에서 A의 영향이 거의 배제될 수 있다는 점이다.(단지 값 자체가 작기 때문에) 하지만 A의 영향이 중요하게 작용한다면 이는 정확도를 크게 떨어뜨릴 것이다. 따라서 두 수치의 스케일이 같도록 보정해주는 과정이 필요하고 이 과정이 바로 데이터 정규화(Data Scaling)에 해당한다.
가장 기본적인 스케일링은 Standard Scaling이다. 이는 특성 $X$를 다음과 같이 변형하는 것을 말한다.
X = (X - m) / σ
(단, m은 특성 X의 평균, σ는 표준편차이다.)
이러한 스케일링을 통해 두 특성의 스케일을 동일하게 맞추어줄 수 있다. 더 자세한 스케일링 방법은 추후 글에서 다룬다.
특성 공학(Feature Engineering)
데이터는 여러 데이터 포인트로 이루어져 있으며, 각 데이터 포인트는 특성(feature)을 가진다. 특성은 attribute variable과 target variable로 구분되는데, attribute variable을 통해 target variable을 예측하는 것을 목표로 한다. 이를 잘 예측하기 위해서는 머신러닝 모델의 성능 개선과 데이터의 품질 향상을 중점적으로 수행해야 하며, 데이터 전처리 수준에서는 attribute variable의 번역 가능성(interpretability)을 높이는 것이 중요하다. 특성공학(Feature Engineering)은 attribute variable(앞으로는 그냥 feature라고 부르겠다)의 복잡도를 늘려 예측의 정확도를 높이고자 하는 시도이다.
하단의 데이터셋은 심장질환 여부를 판별하기 위한 데이터이다. heart_disease가 target variable이고 나머지 변수가 attribute variable이다. 이 때, 특성 공학에서는 다음과 같은 시도로 특성의 다양성을 증대시킨다.
- 각 특성을 제곱한 새로운 특성 $age^{2}, heart rate^{2}, weight^{2}, ...$을 생성한다.
- 각 특성들을 곱한 새로운 특성을 생성한다. ($weight*under disease, age*weight, ...$)
- 각 특성에 exponential function, log function 등을 취해 새로운 특성을 생성한다. ($log heart rate, ...$)
특성을 제곱하는 것은 그 특성의 값 자체에 의미를 두겠다는 것이다. 제곱 연산은 절댓값이 클수록 더욱 커지는 성질을 가지고 있기 때문에 값 자체가 큰 원소를 더욱 강조하는 성질을 가진다. 만약 심장 질환 여부가 나이의 크기에 큰 영향을 받는다고 가정하면(가정이다), $age^{2}$ 특성이 예측에 큰 영향을 미칠 수 있다는 것이다.
각 특성을 곱하는 것은 굉장히 복합적인 성질을 가지는 특성을 생성하는 것이다. 예를 들어 ($age*weight$)와 같은 특성은 age와 weight가 각각 클수록 더 큰 값을 가지게 되고, age와 weight가 모두 큰 상황에 대한 강조가 가능한 특성이다.
특성을 곱해 생성된 새로운 특성은 그 값 자체로 고유한 특성의 역할을 할 수 있기에 굉장히 자주 사용되는 방법이다.
각 특성에 지수함수, 로그 함수 등의 초월함수를 취하는 전략은 매우 유용할 수 있다. 값의 범위가 매우 넓은 특성의 경우, 스케일링을 거치더라도 그 스케일이 줄어들기 어려울 수 있다. 따라서 로그함수를 취함으로서 그 값 자체의 범위를 줄일 수 있다. 값이 매우 작아 정밀한 계산이 요구되는 경우에는 exponential 함수를 취하여 그 크기를 증가시킬 수도 있다.
'인공지능 > 머신러닝' 카테고리의 다른 글
[Machine Learning] 2. Linear Regression(선형 회귀) (0) | 2025.01.04 |
---|---|
[Machine Learning] 0. 머신러닝이란? (3) | 2025.01.03 |