누락 된 데이터를 처리해야하는 워크 플로우의 위치


16

매우 큰 데이터베이스 (여기서는 Vertica에서 SQL 및로 ) 에서 가져온 데이터 에서 기계 학습 모델 (내 경우에는 Python pandassklearn패키지 사용) 을 작성하는 워크 플로우를 작성 중이며 pyodbc해당 프로세스의 중요한 단계는 누락 누락을 포함합니다. 예측 변수의 값. 이것은 단일 분석 또는 통계 플랫폼 (Python, R, Stata 등) 내에서 간단하지만 다중 플랫폼 워크 플로우 에서이 단계를 찾는 가장 좋은 곳이 궁금합니다.

파이썬을 sklearn.preprocessing.Imputer사용하여 클래스를 사용하거나 pandas.DataFrame.fillna메소드를 사용하거나 손으로 사용하는 것은 간단합니다 (사용 된 대치 방법의 복잡성에 따라 다름). 그러나 수억 개의 레코드에서 수십 또는 수백 개의 열에 이것을 사용하기 때문에 미리 SQL을 통해 직접 수행하는보다 효율적인 방법이 있는지 궁금합니다. Vertica와 같은 분산 플랫폼에서이 작업을 수행 할 때의 잠재적 효율성 외에도 "완벽한"버전의 테이블을 구축하기위한 자동화 된 파이프 라인을 만들 수 있다는 이점이 있으므로 새로운 세트를 작성할 필요가 없습니다. 모델을 실행할 때마다 처음부터 누락 된 값

나는 이것에 대해 많은 지침을 찾을 수 없었지만 우리가 할 수 있다고 상상합니다.

  1. 불완전한 각 열에 대한 대체 값 테이블 (예 : 전체 / 그룹 별 평균 / 중앙 / 모드)을 만듭니다.
  2. 대체 값 테이블을 원래 테이블과 결합하여 각 행과 불완전한 열에 대체 값을 지정하십시오.
  3. 가능한 경우 원래 값을 취하고 그렇지 않으면 대체 값을 취하기 위해 일련의 사례 설명을 사용하십시오.

이것이 Vertica / SQL에서 합리적인 일입니까, 아니면 파이썬에서 대신 처리하고 처리하지 않는 좋은 이유가 있습니까? 그리고 후자라면 sklearn보다는 팬더 에서이 작업을 수행하는 강력한 사례가 있습니까? 감사!

답변:


14

대치와 같은 자동화 된 작업 (여기서는 스케일링, 센터링, 기능 선택 등을 포함 할 수 있음)에 대한 나의 견해는 데이터를 신중하게 검사하지 않고 어떤 식 으로든 그러한 일을 피하는 것입니다.

물론, 어떤 종류의 대치가 적용되는지를 결정한 후에는 자동화 할 수 있습니다 (새로운 데이터의 모양 / 문제가 동일하다는 가정하에).

따라서 무엇보다도 현명한 결정을 내리십시오. 나는 종종이 일들을 자동화하려고 노력하면서 데이터를 파괴하는데 시간을 낭비했다. 몇 가지 예를 들겠습니다 :-N / A로 인코딩 된 마켓 플레이스 – 내가 놓 쳤고 North / America로 간주 됨-데이터 생산자가 누락 된 데이터를 더 잘 대체 할 수 없기 때문에 -999.0과 같은 숫자 누락 된 데이터 대신 혈압 또는 체온 (혈압이 0 인 살아있는 사람을 상상하기 어렵습니다)-데이터가 다양한 출처에서 수집 되었기 때문에 누락 된 데이터에 대한 여러 자리 표시 자

그 후 어떤 종류의 대치가 주어진 작업에 대한 데이터의 정보와 더 낫다는 것을 이해해야합니다. 이것은 생각보다 올바른 일을하는 것이 종종 훨씬 어렵습니다.

그 후, 조언은 새로운 데이터를 재현하고 새로운 데이터에 대한 가정이 위반되지 않는지 검사하는 도구가있는 상위 계층으로 대치 작업을 지연시키는 것입니다 (가능한 경우).


1
+1 자동화로 인해 일이 더 나아지고 더 일관되고 자주 빠릅니다!
James

4

Therriault, Vertica를 사용하고 있다는 소식을 정말 기쁘게 생각합니다! 전체 공개, 나는 거기에 최고 데이터 과학자입니다 :). 당신이 설명하는 워크 플로우는 내가 자주 자주 접하는 것이며 pyODBC 및 팬더 작업 전에 데이터베이스에서 매우 큰 데이터 세트를 전처리하는 것을 믿는 사람입니다. 재현 가능한 작업을 보장하기 위해 파일 기반 쿼리를 통해 뷰 또는 테이블을 만드는 것이 좋습니다. 행운을 빕니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.