이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.25 21:47
FunctionTransformer는 scikit-learn 라이브러리에서 제공하는 유틸리티 클래스이다. 이 클래스의 핵심 역할은 사용자가 정의한 임의의 파이썬 함수를 scikit-learn의 변환기(Transformer) 인터페이스를 따르는 객체로 변환하는 것이다. 이를 통해 데이터 전처리나 특성 공학 과정에서 필요한 맞춤형 로직을 표준화된 머신러닝 파이프라인에 쉽게 통합할 수 있게 해준다.
주요 용도는 scikit-learn의 Pipeline 또는 FeatureUnion과 같은 도구와 함께 사용자 정의 함수를 원활하게 연동하는 것이다. 예를 들어, 로그 변환이나 박스-콕스 변환과 같은 기본 변환기로는 처리하기 어려운 복잡한 데이터 변환, 특정 특징 선택 로직, 또는 외부 라이브러리를 활용한 전처리 단계를 구현할 때 유용하게 활용된다.
이 클래스는 fit, transform, fit_transform 메서드를 제공하여 다른 scikit-learn 변환기와 동일한 방식으로 작동한다. 다만, 내부 변환 로직은 사용자가 인자로 전달한 함수에 의해 완전히 결정된다는 점이 특징이다. FunctionTransformer는 scikit-learn 0.17 버전[1] 근처에서 도입되어 데이터 과학 워크플로우의 유연성을 크게 향상시켰다.
FunctionTransformer는 scikit-learn 라이브러리에서 제공하는 변환기 클래스로, 사용자가 정의한 임의의 파이썬 함수를 머신러닝 파이프라인에 호환되는 변환기 객체로 변환하는 역할을 한다. 이 클래스의 핵심 기능은 fit, transform, fit_transform과 같은 표준 scikit-learn 변환기 인터페이스를 따르는 객체를 생성하는 것이다. 이를 통해 사용자는 데이터 전처리나 특성 공학을 위한 복잡한 로직을 직접 작성한 후, StandardScaler나 OneHotEncoder와 같은 내장 변환기와 동일한 방식으로 파이프라인에 조합하여 사용할 수 있다.
주요 특징으로는 높은 유연성을 꼽을 수 있다. 사용자는 넘파이 배열이나 판다스 데이터프레임을 입력으로 받아 처리하는 어떠한 함수라도 변환기로 만들 수 있다. 예를 들어, 로그 변환, 특정 열 선택, 사용자 정의 스케일링, 이상치 처리 등 기존 라이브러리에 없는 맞춤형 전처리 단계를 쉽게 구현할 수 있다. 또한, inverse_transform 메서드를 지원하기 위해 역변환 함수를 별도로 제공할 수 있어, 변환된 데이터를 원본 형태로 되돌리는 작업도 가능하다.
이 클래스는 파이프라인과 그리드 서치와의 완벽한 통합을 지향한다. FunctionTransformer로 생성된 변환기는 파이프라인의 한 단계로 삽입될 수 있으며, 교차 검증 과정에서도 안정적으로 작동한다. 이는 사용자 정의 전처리 로직이 모델 선택 및 하이퍼파라미터 튜닝 과정에 포함될 수 있음을 의미하며, 머신러닝 워크플로우의 재현성과 자동화를 크게 향상시킨다.
FunctionTransformer는 scikit-learn의 변환기(Transformer) 인터페이스를 따르는 클래스로, 사용자가 정의한 임의의 파이썬 함수를 머신러닝 파이프라인에서 호환 가능한 변환기 객체로 포장하는 역할을 한다. 이 클래스의 핵심 작동 원리는 fit, transform, fit_transform 등의 표준 변환기 메서드를 사용자 함수 주위에 적절히 래핑(Wrapping)하여 scikit-learn의 Pipeline이나 ColumnTransformer와 같은 도구와 원활하게 연동되도록 하는 데 있다.
내부적으로 FunctionTransformer는 사용자로부터 func(변환 함수), inverse_func(역변환 함수), validate, accept_sparse, check_inverse 등의 매개변수를 받아 인스턴스를 생성한다. transform 메서드가 호출되면, 이는 내부에 저장된 사용자 정의 func 함수를 입력 데이터에 적용하고 그 결과를 반환한다. fit 메서드는 일반적으로 아무런 작업도 수행하지 않으며(단순히 자기 자신을 반환), 데이터의 상태를 학습할 필요가 없는 단순 함수 변환의 특성을 반영한다. 이로 인해 통계적 모델 기반의 변환과 달리 훈련 데이터에 의존하지 않는 결정론적 변환을 구현하는 데 적합하다.
FunctionTransformer는 특성 선택, 로그 변환, 범주형 인코딩의 전처리 단계, 또는 기존 특성들로부터 새로운 특성을 생성하는 특성 공학 작업을 파이프라인에 통합할 때 유용하다. 또한 inverse_func 매개변수를 이용해 변환의 역과정을 정의하면, 하이퍼파라미터 튜닝이나 모델 해석 과정에서 변환된 데이터를 원본 스케일로 되돌리는 작업도 가능해진다. 이는 데이터 전처리의 재현성과 모듈성을 높이는 데 기여한다.
FunctionTransformer의 기본 사용법은 먼저 변환에 사용할 사용자 정의 함수를 정의하는 것으로 시작한다. 이 함수는 입력 데이터(넘파이 배열이나 판다스 데이터프레임)를 받아 변환된 데이터를 반환해야 한다. 이 함수를 FunctionTransformer의 func 매개변수에 전달하여 변환기 인스턴스를 생성한다. 생성된 변환기는 fit 메서드를 호출할 수 있으나, 일반적으로 별도의 학습 과정이 필요 없으므로 입력 데이터를 그대로 반환하는 identity 함수와 동일하게 작동한다. 이후 transform 메서드를 호출하거나, 다른 변환기 및 추정기와 함께 Pipeline 객체에 조합하여 사용한다.
주요 사용 패턴은 make_pipeline이나 Pipeline을 사용하여 머신러닝 워크플로우에 통합하는 것이다. 예를 들어, 로그 변환, 특성 선택, 사용자 정의 스케일링 등의 함수를 정의한 후 FunctionTransformer로 감싸면, 교차 검증과 그리드 서치를 포함한 scikit-learn의 모든 모델 선택 도구와 원활하게 호환되는 전처리 단계를 만들 수 있다. 이를 통해 데이터 전처리와 모델 학습의 단계를 하나의 객체로 체계적으로 관리할 수 있다.
FunctionTransformer는 inverse_func 매개변수를 통해 역변환 함수를 지정할 수도 있으며, validate, accept_sparse, check_inverse 등의 매개변수로 데이터 검증이나 희소 행렬 지원 여부를 제어할 수 있다. 이는 특성 공학 과정에서 생성된 특성을 원본 스케일로 되돌려 해석하거나, 특정 데이터 형식에 맞춰 변환기를 조정할 때 유용하다.
FunctionTransformer의 동작을 제어하는 주요 매개변수는 다음과 같다.
func은 변환의 핵심이 되는 사용자 정의 함수를 지정한다. 이 함수는 입력 데이터(넘파이 배열 또는 판다스 데이터프레임)를 받아 변환된 데이터를 반환해야 하며, scikit-learn의 변환기 인터페이스와 호환되도록 단일 인자만을 받도록 설계된다. inverse_func 매개변수는 변환의 역연산을 수행하는 함수를 지정하여, 변환된 데이터를 원본 형태로 되돌리는 기능을 가능하게 한다. 이는 모델 해석이나 특정 파이프라인 작업에 유용하다.
validate 매개변수를 True로 설정하면 입력 데이터가 넘파이 배열 또는 희소 행렬인지 자동으로 검증하며, accept_sparse를 통해 희소 행렬 입력을 허용할지 여부를 추가로 제어할 수 있다. check_inverse 매개변수는 inverse_func이 제공될 경우, 변환과 역변환을 연속 적용했을 때 원본 데이터를 정확히 복원하는지 검증하는 절차를 수행할지 결정한다.
마지막으로, kw_args와 inv_kw_args는 각각 func과 inverse_func 함수에 추가적인 키워드 인자를 전달하는 데 사용된다. 이를 통해 사용자 정의 함수에 외부에서 매개변수를 동적으로 제공할 수 있어 변환기의 유연성을 크게 높인다.
FunctionTransformer는 데이터 전처리 작업에서 사용자 정의 함수를 쉽게 scikit-learn의 파이프라인에 통합할 수 있게 해주는 도구이다. 데이터 과학 프로젝트에서 원본 데이터는 모델이 직접 학습할 수 있는 형태가 아닌 경우가 많다. 이러한 경우 로그 변환, 결측치 대체, 이상치 제거, 특성 스케일링 등의 전처리 과정이 필수적이며, FunctionTransformer는 이러한 사용자 정의 전처리 로직을 표준화된 변환기 인터페이스로 포장하는 역할을 한다.
예를 들어, 수치형 데이터의 분포를 정규화하기 위해 로그를 취하는 함수를 정의했다면, 이 함수를 FunctionTransformer로 감싸서 Pipeline 객체 안에 다른 변환기(StandardScaler 등)나 추정기와 함께 순차적으로 배치할 수 있다. 이를 통해 전체 머신러닝 워크플로우를 단일 객체로 관리하고 교차 검증을 적용하는 것이 용이해진다. 또한, 역변환 기능을 활용해 변환된 데이터를 원본 스케일로 되돌려 해석을 용이하게 할 수도 있다.
데이터 전처리에서 FunctionTransformer의 주요 강점은 기존 scikit-learn 라이브러리에 포함되지 않은 매우 구체적인 전처리 단계를 구현할 수 있다는 점이다. 특정 도메인 지식(예: 금융 데이터의 이동평균 계산, 텍스트 데이터의 사용자 정의 정규화)이 필요한 변환이나 복잡한 조건부 처리 로직도 사용자 함수로 정의한 후 변환기로 사용할 수 있다. 이는 특성 공학의 유연성을 크게 높여준다.
따라서 FunctionTransformer는 표준화된 변환기 클래스가 존재하지 않는 맞춤형 데이터 전처리 작업을 머신러닝 파이프라인에 깔끔하게 통합해야 할 때 매우 유용한 유틸리티이다.
피처 엔지니어링은 머신러닝 모델의 성능을 향상시키기 위해 원본 데이터로부터 새로운 특성을 생성하거나 기존 특성을 변환하는 과정이다. FunctionTransformer는 이러한 피처 엔지니어링 작업을 scikit-learn의 파이프라인에 깔끔하게 통합할 수 있게 해주는 도구이다. 사용자는 파이썬 함수나 람다 표현식을 이용해 로그 변환, 비닝, 다항식 특성 생성, 특성 간의 상호작용 항 계산 등 다양한 맞춤형 변환 로직을 정의할 수 있다.
이 클래스를 사용하면 데이터 전처리와 피처 엔지니어링 단계를 하나의 일관된 워크플로우로 구성할 수 있다. 예를 들어, 수치형 데이터의 스케일을 조정하거나, 텍스트 데이터에서 단어 빈도를 계산하는 사용자 함수를 작성한 후, StandardScaler나 CountVectorizer 같은 내장 변환기와 함께 파이프라인에 순차적으로 배치할 수 있다. 이를 통해 교차 검증과 하이퍼파라미터 튜닝 시 데이터 누출을 방지하면서도 복잡한 변환 과정을 자동화할 수 있다.
FunctionTransformer는 특히 표준 scikit-learn 변환기로는 구현하기 어려운 도메인 특화된 지식 기반의 변환에 유용하다. 금융 데이터에서 변동성 지표를 계산하거나, 지리 공간 데이터에서 특정 지점까지의 거리를 새로운 특성으로 추가하는 등의 작업을 쉽게 구현하여 모델에 반영할 수 있다. 따라서 이 클래스는 머신러닝 프로젝트에서 특성 공학의 유연성과 생산성을 크게 높여준다.
FunctionTransformer의 주요 장점은 scikit-learn의 파이프라인과 그리드 서치와 같은 도구와 원활하게 통합될 수 있다는 점이다. 이를 통해 사용자가 정의한 임의의 함수를 표준화된 변환기 인터페이스(fit, transform, fit_transform)로 감싸, 복잡한 머신러닝 워크플로우에 쉽게 포함시킬 수 있다. 이는 데이터 전처리나 특성 공학 단계에서 표준 변환기로 제공되지 않는 맞춤형 로직을 구현해야 할 때 매우 유용하다. 또한, 인verse_transform 메서드를 통해 변환된 데이터를 원본 형태로 되돌리는 기능도 선택적으로 구현할 수 있어 유연성을 더한다.
반면, FunctionTransformer의 단점은 사용자 정의 함수의 품질과 안정성에 전적으로 의존한다는 것이다. scikit-learn이 제공하는 내장 변환기들은 데이터 유형 검사나 오류 처리 등이 내부적으로 구현되어 있지만, FunctionTransformer는 사용자가 작성한 함수를 그대로 실행하므로 함수 내부의 버그나 예외 상황에 취약할 수 있다. 또한, 하이퍼파라미터 튜닝 과정에서 함수 자체의 내부 매개변수를 직접 최적화하기는 어려운 경우가 많다.
마지막으로, 이 클래스는 변환 과정에서 학습이 필요한 매개변수를 추정하지 않는다는 점도 특징이다. fit 메서드는 단순히 자기 자신을 반환할 뿐이며, 이는 순수한 함수적 변환에 적합하지만, 훈련 데이터의 통계를 기반으로 변환 파라미터를 학습해야 하는 복잡한 전처리에는 적합하지 않을 수 있다. 따라서 데이터의 분포를 고려한 변환이 필요하다면 StandardScaler나 OneHotEncoder 같은 내장 추정기를 사용하거나, FunctionTransformer와 함께 ColumnTransformer를 조합하는 것이 더 바람직하다.