2021.03.26

‘데이터 랭글링’ 및 ‘탐구 데이터 분석’ 따라잡기

Martin Heller | InfoWorld
초보 데이터 사이언티스트는 데이터를 위한 적절한 모델만 찾아 적용하면 된다는 생각을 할 때가 있다. 애석하게도 이보다 더 데이터 사이언스의 현실과 동떨어진 것도 드물 것이다. 사실, 데이터 랭글링(Data Wrangling, 소위 말하는 데이터 정제 및 변경)과 탐구 데이터 분석(exploratory data analysis)은 데이터 사이언티스트가 소요하는 시간의 80%를 차지하는 경우가 많다.

데이터 랭글링과 탐구 데이터 분석의 개념은 쉽다. 단 제대로 하기가 어려울 수 있다. 정제되지 않거나 잘못 정제된 데이터는 쓰레기이며, GIGO 원리(garbage in, garbage out)는 모델링과 분석에도 적용된다.

데이터 랭글링이란?
데이터가 곧바로 사용 가능한 형태로 나오는 경우는 드물다. 오류와 누락으로 오염되는 경우가 많으며 원하는 구조를 가진 경우가 거의 없고 일반적으로 콘텍스트가 누락되어 있다. 데이터 랭글링은 데이터를 발견하고 정제하며 검증하고 사용 가능하도록 구조화한 후 콘텐츠의 질을 높이며(날씨와 경제 상황 등 공개 데이터로부터 얻은 정보 추가 등의 방식으로) 경우에 따라 데이터를 통합 및 변환하는 과정이다.

정확하게 말하면 데이터 랭글링 작업은 경우에 따라 달라질 수 있다. 데이터가 기구 또는 IoT 장치에서 제공되는 경우 데이터 전송이 프로세스의 주된 부분일 수 있다. 데이터를 머신러닝에 사용하는 경우 변환에 정규화와 표준화뿐 아니라 차원수 감소도 포함될 수 있다. 

탐구 데이터 분석이 메모리와 저장 공간이 제한된 개인용 컴퓨터에서 수행되는 경우, 랭글링 프로세스에 데이터 하위 세트 추출이 포함될 수 있다. 데이터를 여러 개의 소스로부터 얻는 경우 측정값의 필드 이름과 단위를 매핑과 변환을 통해 통합해야 한다.

탐구 데이터 분석이란 무엇인가?
탐구 데이터 분석은 프린스턴 대학교(Princeton University)와 벨 연구소(Bell Labs) 소속인 존 투키와 긴밀히 연관되어 있다. 투키는 1961년에 탐구 데이터 분석을 제안했으며 1977년에 이에 관해 저술했다. 탐구 데이터 분석에 대한 투키의 관심은 벨 연구소에서의 통계적 언어 개발에 영향을 미쳤으며, 이것이 나중에 S플러스(S-Plus)와 R로 이어졌다.

탐구 데이터 분석은 투키가 확정 데이터 분석이라고도 하는 통계적 가설 테스트를 과도하게 강조한다고 생각함에 따라 개발됐다. 둘 사이의 차이점은 탐구 데이터 분석에서는 가설로 바로 이동하고 선과 곡선을 데이터에 적용하기보다는 데이터를 먼저 조사하며 이를 사용해 가설을 제안한다.

실제로 탐구 데이터 분석은 그래픽과 기술 통계를 결합한다. 투키는 R을 사용하여 1990년대의 베트남 경제를 히스토그램, 커널 밀도 추정, 상자 그림, 평균 및 표준 편차, 구체적인 그래프로 탐구한 바 있다.

데이터 분석을 위한 ETL과 ELT
전통적인 데이터베이스 사용에서 ETL(Extract, Transform, Load)은 데이터 소스(주로 트랜잭션 데이터베이스)로부터 데이터를 추출하고 분석에 적합한 구조로 변환하며 데이터 웨어하우스(Data Warehouse)로 로딩하는 프로세스이다. 

ELT(Extract, Load, Transform)는 좀더 현대적인 프로세스다. 데이터가 미가공 형태로 데이터 레이크(Data Lake) 또는 데이터 웨어하우스로 이동한 후 데이터 웨어하우스가 필요한 변환을 수행한다.

데이터 레이크나, 데이터 웨어하우스가 있거나, 둘 다 있거나 둘 다 없는지 여부에 상관없이 ELT 프로세스는 ETL 프로세스보다 데이터 분석, 특히 머신러닝에 더욱 적합하다. 근본적인 이유는 머신러닝 중 변수 가공(Feature Engineering) 서비스에서 데이터 변환을 반복해야 하는 경우가 많기 때문이며, 이것은 적절한 예측에 매우 중요하다.

데이터 마이닝을 위한 스크린 스크래핑(Screen Scraping)
데이터가 파일로 또는 API를 통해 분석 프로그램이 판독할 수 있는 형식으로 제공될 때가 있다. 하지만 데이터가 표로 정리된 웹 사이트 등 다른 프로그램의 출력값으로만 제공되는 경우는 어떨까?

웹 브라우저를 모방하는 프로그램으로 웹 데이터를 분석하고 수집하는 것은 그리 어렵지 않다. 이 프로세스를 스크린 스크래핑, 웹 스크래핑, 데이터 스크래핑 등으로 부른다. 스크린 스크래핑은 본래 컴퓨터 터미널 화면상의 텍스트 데이터를 판독하는 것이 목적이었지만, 요즈음은 HTML 웹 페이지에 표시되는 데이터에 훨씬 더 보편적이다.

데이터 분석을 위한 데이터 정제 및 누락값 귀속
대부분의 실제 미가공 데이터세트에는 누락되거나 확실히 잘못된 데이터 값이 있다. 단순한 데이터 정제 단계에는 누락된 값의 비율이 높은 열과 행을 제외하는 것이 포함된다. 또한 프로세스 후반에 이상점을 제거할 수도 있다.

때로는, 이 규칙을 따를 때 데이터를 너무 많이 잃게 된다. 누락된 값을 처리하는 또 다른 방법은 값의 귀속이다. 즉, 값을 추측하는 것이다. 일반적인 파이썬(Python) 라이브러리를 사용하여 쉽게 구현할 수 있다.

read_csv() 등의 판다스(Pandas) 데이터 가져오기 기능이 ‘?’ 등의 플레이스 홀더 기호를 ‘NaN’으로 대체할 수 있다. Scikit_learn class SimpleImputer()는 열 평균, 열 중간값, 열 모드, 상수 등 4가지 스트래터지(Strategy) 중 하나를 사용하여 ‘NaN’ 값을 대체할 수 있다. 상수 대체값의 경우 수치 필드의 기본값은 ‘0’이며 문자열 또는 객체 필드는 ‘missing_value’이다. fill_value를 설정하여 그 기본값을 덮어쓸 수 있다.

어떤 귀속 전략이 가장 좋을까? 데이터와 모델에 따라 다르기 때문에 이를 알아내는 유일한 방법은 모두 시도해 보고 어떤 스트래터지가 검증 정확도 점수가 가장 높은 핏 모델(Fit Model)을 산출하는지 확인하는 것이다.

예측 모델링을 위한 특징 가공(Feature engineering)
특징(feature)은 관찰되는 현상의 개별적인 측정 가능한 속성 또는 특성이다. 특징 가공은 문제를 설명하는 독립적인 변수들의 최소 세트의 구조이다. 2개의 변수가 상호 긴밀히 관련되어 있는 경우 단일 특징으로 결합하거나 하나를 포기해야 한다. 상호 관련된 특징들을 상호 선형적으로 관련되지 않은 즉징의 세트로 변환하는 주성분 분석(PCA)을 수행할 때가 있다.

일반적으로 텍스트 형태를 띠는 카테고리 변수는 숫자로 인코딩해야 머신러닝에 사용할 수 있다. 각 카테고리에 정수를 할당(라벨 인코딩)하는 것이 확실하고 쉬워 보이지만 안타깝게도 일부 머신러닝 모델은 정수를 서수(ordinals)로 오인한다. 인기 있는 대안은 각 카테고리가 1 또는 0으로 코딩되는 행(또는 벡터의 차원)에 할당되는 원핫인코딩(One-hot Encoding)이다.

특징 생성은 미가공 관찰결과에서 새 특징을 구성하는 프로세스이다. 예를 들어, 사망 년도에서 출생 년도를 빼고 사망 당시의 연령을 구성하는 것은 수명 및 사망 분석을 위한 기본적인 독립적 변수이다. 심층 특징 합성(Deep Feature Synthesis) 알고리즘은 특징 생성 자동화에 유용하다. 오픈소스 피처툴즈(Featuretools) 프레임워크에 구현되어 있다.

특징 선택은 분석에서 불필요한 특징을 없애 ‘차원수의 저주’와 데이터 과적용을 피하는 프로세스이다. 차원수 감소 알고리즘은 이를 자동으로 수행할 수 있다. 기법에는 여러 개의 값이 누락된 변수 제거하기, 분산이 작은 변수 제거하기, 판단 트리(Decision Tree), 랜덤 포레스트(Random Forest), 상관관계가 높은 변수 제거 또는 결합하기, BFE(Backward Feature Elimination), FFS(Forward Feature Selection), 요인분석(Factor Analysis), PCA 등이 있다.

머신러닝(ML)을 위한 데이터 정규화
머신 회귀에 수치 데이터를 사용하려면 일반적으로 데이터를 정규화해야 한다. 그렇지 않으면 범위가 더 큰 숫자가 기능 벡터들 사이의 유클리드 간격을 지배하는 경향이 있을 수 있으며, 다른 필드를 희생하면서 영향이 증폭되고 가장 가파른 하강 최적화가 수렴하는데 어려움이 있을 수 있다. 최소-최대 정규화, 평균 정규화, 표준화, 단위 길이로 확장 등 머신러닝을 위해 데이터를 정규화 및 표준화할 수 있는 방법이 많다. 이 과정을 특징 확장(feature scaling)이라 부르곤 한다.  
데이터 분석 라이프사이클
수많은 데이터 분석 라이프사이클의 변종이 있을 수 있지만 계수 방법에 따라 7 또는 8가지로 분류할 수 있다.

1. 비즈니스 이해를 위해 답을 찾을 문제와 예측해야 하는 변수 확인하기.
2. 데이터 획득하기(데이터 마이닝).
3. 행을 버리거나 값을 귀속하여 데이터를 정제하고 누락된 데이터 고려하기
4. 데이터 탐구하기.
5. 변수 가공 수행하기.
6. 머신 러닝, 검증, 통계적 방법과 테스트를 포함한 예측 모델링.
7. 데이터 시각화.
8. 1단계(비즈니스 이해)로 되돌아가 사이클 계속하기.

2단계와 3단계를 데이터 랭글링으로 간주하는 경우가 많지만 답을 찾을 비즈니스 문제를 확인하여(1단계) 데이터 랭글링의 콘텍스트를 수립하는 것이 중요하다. 또한 모델링 전에 탐구 데이터 분석(4단계)을 수행하여 예측에 편견이 유입되는 것을 방지하는 것도 중요하다. 최고의 모델과 특징 세트를 찾기 위해 5~7단계를 반복하는 경우가 보통이다.

그리고 이 라이프사이클은 거의 항상 끝났다고 생각할 때 다시 시작되며, 그 이유는 조건 변경, 데이터 드리프트(Data Drift), 추가적인 문제의 답을 찾아야 할 비즈니스적 필요 등이다.

* 인포월드 기고 편집자이자 리뷰어인 Martin Heller는 웹 및 윈도우 프로그래밍 컨설턴트 경력을 보유자다. 1986년부터 2010년까지는 데이터베이스, 소프트웨어, 웹사이트 개발자로 일했으며 그 이후에는 알파 소프트웨어의 기술 및 교육 부사장, 튜브파이의 의장이자 CEO를 역임했다. ciokr@idg.co.kr



2021.03.26

‘데이터 랭글링’ 및 ‘탐구 데이터 분석’ 따라잡기

Martin Heller | InfoWorld
초보 데이터 사이언티스트는 데이터를 위한 적절한 모델만 찾아 적용하면 된다는 생각을 할 때가 있다. 애석하게도 이보다 더 데이터 사이언스의 현실과 동떨어진 것도 드물 것이다. 사실, 데이터 랭글링(Data Wrangling, 소위 말하는 데이터 정제 및 변경)과 탐구 데이터 분석(exploratory data analysis)은 데이터 사이언티스트가 소요하는 시간의 80%를 차지하는 경우가 많다.

데이터 랭글링과 탐구 데이터 분석의 개념은 쉽다. 단 제대로 하기가 어려울 수 있다. 정제되지 않거나 잘못 정제된 데이터는 쓰레기이며, GIGO 원리(garbage in, garbage out)는 모델링과 분석에도 적용된다.

데이터 랭글링이란?
데이터가 곧바로 사용 가능한 형태로 나오는 경우는 드물다. 오류와 누락으로 오염되는 경우가 많으며 원하는 구조를 가진 경우가 거의 없고 일반적으로 콘텍스트가 누락되어 있다. 데이터 랭글링은 데이터를 발견하고 정제하며 검증하고 사용 가능하도록 구조화한 후 콘텐츠의 질을 높이며(날씨와 경제 상황 등 공개 데이터로부터 얻은 정보 추가 등의 방식으로) 경우에 따라 데이터를 통합 및 변환하는 과정이다.

정확하게 말하면 데이터 랭글링 작업은 경우에 따라 달라질 수 있다. 데이터가 기구 또는 IoT 장치에서 제공되는 경우 데이터 전송이 프로세스의 주된 부분일 수 있다. 데이터를 머신러닝에 사용하는 경우 변환에 정규화와 표준화뿐 아니라 차원수 감소도 포함될 수 있다. 

탐구 데이터 분석이 메모리와 저장 공간이 제한된 개인용 컴퓨터에서 수행되는 경우, 랭글링 프로세스에 데이터 하위 세트 추출이 포함될 수 있다. 데이터를 여러 개의 소스로부터 얻는 경우 측정값의 필드 이름과 단위를 매핑과 변환을 통해 통합해야 한다.

탐구 데이터 분석이란 무엇인가?
탐구 데이터 분석은 프린스턴 대학교(Princeton University)와 벨 연구소(Bell Labs) 소속인 존 투키와 긴밀히 연관되어 있다. 투키는 1961년에 탐구 데이터 분석을 제안했으며 1977년에 이에 관해 저술했다. 탐구 데이터 분석에 대한 투키의 관심은 벨 연구소에서의 통계적 언어 개발에 영향을 미쳤으며, 이것이 나중에 S플러스(S-Plus)와 R로 이어졌다.

탐구 데이터 분석은 투키가 확정 데이터 분석이라고도 하는 통계적 가설 테스트를 과도하게 강조한다고 생각함에 따라 개발됐다. 둘 사이의 차이점은 탐구 데이터 분석에서는 가설로 바로 이동하고 선과 곡선을 데이터에 적용하기보다는 데이터를 먼저 조사하며 이를 사용해 가설을 제안한다.

실제로 탐구 데이터 분석은 그래픽과 기술 통계를 결합한다. 투키는 R을 사용하여 1990년대의 베트남 경제를 히스토그램, 커널 밀도 추정, 상자 그림, 평균 및 표준 편차, 구체적인 그래프로 탐구한 바 있다.

데이터 분석을 위한 ETL과 ELT
전통적인 데이터베이스 사용에서 ETL(Extract, Transform, Load)은 데이터 소스(주로 트랜잭션 데이터베이스)로부터 데이터를 추출하고 분석에 적합한 구조로 변환하며 데이터 웨어하우스(Data Warehouse)로 로딩하는 프로세스이다. 

ELT(Extract, Load, Transform)는 좀더 현대적인 프로세스다. 데이터가 미가공 형태로 데이터 레이크(Data Lake) 또는 데이터 웨어하우스로 이동한 후 데이터 웨어하우스가 필요한 변환을 수행한다.

데이터 레이크나, 데이터 웨어하우스가 있거나, 둘 다 있거나 둘 다 없는지 여부에 상관없이 ELT 프로세스는 ETL 프로세스보다 데이터 분석, 특히 머신러닝에 더욱 적합하다. 근본적인 이유는 머신러닝 중 변수 가공(Feature Engineering) 서비스에서 데이터 변환을 반복해야 하는 경우가 많기 때문이며, 이것은 적절한 예측에 매우 중요하다.

데이터 마이닝을 위한 스크린 스크래핑(Screen Scraping)
데이터가 파일로 또는 API를 통해 분석 프로그램이 판독할 수 있는 형식으로 제공될 때가 있다. 하지만 데이터가 표로 정리된 웹 사이트 등 다른 프로그램의 출력값으로만 제공되는 경우는 어떨까?

웹 브라우저를 모방하는 프로그램으로 웹 데이터를 분석하고 수집하는 것은 그리 어렵지 않다. 이 프로세스를 스크린 스크래핑, 웹 스크래핑, 데이터 스크래핑 등으로 부른다. 스크린 스크래핑은 본래 컴퓨터 터미널 화면상의 텍스트 데이터를 판독하는 것이 목적이었지만, 요즈음은 HTML 웹 페이지에 표시되는 데이터에 훨씬 더 보편적이다.

데이터 분석을 위한 데이터 정제 및 누락값 귀속
대부분의 실제 미가공 데이터세트에는 누락되거나 확실히 잘못된 데이터 값이 있다. 단순한 데이터 정제 단계에는 누락된 값의 비율이 높은 열과 행을 제외하는 것이 포함된다. 또한 프로세스 후반에 이상점을 제거할 수도 있다.

때로는, 이 규칙을 따를 때 데이터를 너무 많이 잃게 된다. 누락된 값을 처리하는 또 다른 방법은 값의 귀속이다. 즉, 값을 추측하는 것이다. 일반적인 파이썬(Python) 라이브러리를 사용하여 쉽게 구현할 수 있다.

read_csv() 등의 판다스(Pandas) 데이터 가져오기 기능이 ‘?’ 등의 플레이스 홀더 기호를 ‘NaN’으로 대체할 수 있다. Scikit_learn class SimpleImputer()는 열 평균, 열 중간값, 열 모드, 상수 등 4가지 스트래터지(Strategy) 중 하나를 사용하여 ‘NaN’ 값을 대체할 수 있다. 상수 대체값의 경우 수치 필드의 기본값은 ‘0’이며 문자열 또는 객체 필드는 ‘missing_value’이다. fill_value를 설정하여 그 기본값을 덮어쓸 수 있다.

어떤 귀속 전략이 가장 좋을까? 데이터와 모델에 따라 다르기 때문에 이를 알아내는 유일한 방법은 모두 시도해 보고 어떤 스트래터지가 검증 정확도 점수가 가장 높은 핏 모델(Fit Model)을 산출하는지 확인하는 것이다.

예측 모델링을 위한 특징 가공(Feature engineering)
특징(feature)은 관찰되는 현상의 개별적인 측정 가능한 속성 또는 특성이다. 특징 가공은 문제를 설명하는 독립적인 변수들의 최소 세트의 구조이다. 2개의 변수가 상호 긴밀히 관련되어 있는 경우 단일 특징으로 결합하거나 하나를 포기해야 한다. 상호 관련된 특징들을 상호 선형적으로 관련되지 않은 즉징의 세트로 변환하는 주성분 분석(PCA)을 수행할 때가 있다.

일반적으로 텍스트 형태를 띠는 카테고리 변수는 숫자로 인코딩해야 머신러닝에 사용할 수 있다. 각 카테고리에 정수를 할당(라벨 인코딩)하는 것이 확실하고 쉬워 보이지만 안타깝게도 일부 머신러닝 모델은 정수를 서수(ordinals)로 오인한다. 인기 있는 대안은 각 카테고리가 1 또는 0으로 코딩되는 행(또는 벡터의 차원)에 할당되는 원핫인코딩(One-hot Encoding)이다.

특징 생성은 미가공 관찰결과에서 새 특징을 구성하는 프로세스이다. 예를 들어, 사망 년도에서 출생 년도를 빼고 사망 당시의 연령을 구성하는 것은 수명 및 사망 분석을 위한 기본적인 독립적 변수이다. 심층 특징 합성(Deep Feature Synthesis) 알고리즘은 특징 생성 자동화에 유용하다. 오픈소스 피처툴즈(Featuretools) 프레임워크에 구현되어 있다.

특징 선택은 분석에서 불필요한 특징을 없애 ‘차원수의 저주’와 데이터 과적용을 피하는 프로세스이다. 차원수 감소 알고리즘은 이를 자동으로 수행할 수 있다. 기법에는 여러 개의 값이 누락된 변수 제거하기, 분산이 작은 변수 제거하기, 판단 트리(Decision Tree), 랜덤 포레스트(Random Forest), 상관관계가 높은 변수 제거 또는 결합하기, BFE(Backward Feature Elimination), FFS(Forward Feature Selection), 요인분석(Factor Analysis), PCA 등이 있다.

머신러닝(ML)을 위한 데이터 정규화
머신 회귀에 수치 데이터를 사용하려면 일반적으로 데이터를 정규화해야 한다. 그렇지 않으면 범위가 더 큰 숫자가 기능 벡터들 사이의 유클리드 간격을 지배하는 경향이 있을 수 있으며, 다른 필드를 희생하면서 영향이 증폭되고 가장 가파른 하강 최적화가 수렴하는데 어려움이 있을 수 있다. 최소-최대 정규화, 평균 정규화, 표준화, 단위 길이로 확장 등 머신러닝을 위해 데이터를 정규화 및 표준화할 수 있는 방법이 많다. 이 과정을 특징 확장(feature scaling)이라 부르곤 한다.  
데이터 분석 라이프사이클
수많은 데이터 분석 라이프사이클의 변종이 있을 수 있지만 계수 방법에 따라 7 또는 8가지로 분류할 수 있다.

1. 비즈니스 이해를 위해 답을 찾을 문제와 예측해야 하는 변수 확인하기.
2. 데이터 획득하기(데이터 마이닝).
3. 행을 버리거나 값을 귀속하여 데이터를 정제하고 누락된 데이터 고려하기
4. 데이터 탐구하기.
5. 변수 가공 수행하기.
6. 머신 러닝, 검증, 통계적 방법과 테스트를 포함한 예측 모델링.
7. 데이터 시각화.
8. 1단계(비즈니스 이해)로 되돌아가 사이클 계속하기.

2단계와 3단계를 데이터 랭글링으로 간주하는 경우가 많지만 답을 찾을 비즈니스 문제를 확인하여(1단계) 데이터 랭글링의 콘텍스트를 수립하는 것이 중요하다. 또한 모델링 전에 탐구 데이터 분석(4단계)을 수행하여 예측에 편견이 유입되는 것을 방지하는 것도 중요하다. 최고의 모델과 특징 세트를 찾기 위해 5~7단계를 반복하는 경우가 보통이다.

그리고 이 라이프사이클은 거의 항상 끝났다고 생각할 때 다시 시작되며, 그 이유는 조건 변경, 데이터 드리프트(Data Drift), 추가적인 문제의 답을 찾아야 할 비즈니스적 필요 등이다.

* 인포월드 기고 편집자이자 리뷰어인 Martin Heller는 웹 및 윈도우 프로그래밍 컨설턴트 경력을 보유자다. 1986년부터 2010년까지는 데이터베이스, 소프트웨어, 웹사이트 개발자로 일했으며 그 이후에는 알파 소프트웨어의 기술 및 교육 부사장, 튜브파이의 의장이자 CEO를 역임했다. ciokr@idg.co.kr

X