
InterativeImputer
InterativeImputer
다변량 대체 방법 사용하여 누락된 값을 추정
(sklearn 패키지를 사용하여 이용 가능)
InterativeImputer의 하이퍼 파라미터
- estimater : 누락된 값을 추정하기 위해 사용할 추정기 / 기본값->BayesianRidge()
- LinearRegression, DecisionTreeRegressor, KNeighborsRegressor 등 다른 회귀 추정치도 가능
- max_iter : 최대 반복 횟수(누락된 값을 추정하는 최대 사이클 수)->기본값:10
- random_state : 난수 생성기의 시드 값을 설정(동일한 결과 재현에 유용)
- initial_strategy : 누락된 값을 초기에 대치할 전략
- mean(평균 대치), median(중간값 대치), most_frequent(최대빈도값 대치), constant(특정상수값 대치) 중 하나 선택 가능->기본값:mean
- imputation_order : 특성을 대치하는 순서 결정
- ascending, descending, roman, arabic, random 중 선택->기본값:ascending
- skip_complete : True로 설정->완전한 케이스(누락된 값이 없는 경우)를 계산에서 제외->기본값:False
- add_indicater : 누락된 특성에 대한 추가적 지표(누락된 값이 있음을 나타내는 이진 변수)를 추가할지 여부 결정->기본값:False
- tol : 반복을 멈출 임계값으로 이전과 현재 반복 사이의 평균 제곱 차이가 이 값보다 작을 경우 반복 중지->기본값:1e-3
- n_nearest_features : 각 특성을 대치할 때 고려할 다른 특성의 수 (None 설정시, 모든 특성 사용)->기본값:None
- verbose : 실행 중 출력 메세지의 양을 제어, 값이 클수록 더 많은 메세지가 출력->기본값:0
- sample_posterior : True 설정->BayesianRidge 추정기를 사용할 때 샘플링을 통해 후방 분포에서 값을 추정->기본값:False
SimpleImputer
SimpleImputer
누락된 값을 mean(평균), median(중앙값), (최빈값), (상수)로 대체하는 단변량 대체
(pandas의 DataFrame이 제공하는 기능과 유사)
SimpleImputer 하이퍼파라미터
- missimg_value : 누락된 값을 나타내는 placeholder ->기본값:np.nan(숫자나 NaN 외에도 다른 표현 사용 가능)
- strategy : 누락된 값을 대체할 방법 결정
- mean(평균), median(중간값), most_frequent(최대빈도값), constant(특정상수값) ->기본값:mean
- fill_value : strategy="constant"를 사용할 때 누락된 값을 대체하기 위한 상수 값 설정->기본값:None(모든 누락 값을 해당 값으로 대체)
- copy : True인 경우, 원본 데이터는 변경되지 않고 새 데이터 배열 생성 / False인 경우, 원본 데이터가 대체 ->기본값:True
- add_adicater : True인 경우, 누락된 값이 있는 특성에 대한 인디케이터(지시자) 변수가 결과에 추가->기본값:False
KNNImputer
KNNImputer
주어진 데이터 포인트에서 가장 가까운 k개의 이웃을 찾고, 이 이웃들의 평균값을 사용하여 누락된 값을 대체
KNNImputer 하이퍼파라미터
- missing_value : 누락된 값을 나타내는 placeholder ->기본값:np.nan
- n_neighbors : 누락된 값을 대체하는데 사용하는 가장 가까운 이웃의 수->기본값:5
- weights : 이웃을 가중치하는 방법(사용자 정의 함수 사용)->기본값:uniform
- uniform : 모든 이웃에게 동일한 가중치 부여
- distance : 가까운 이웃에게 더 높은 가중치 부여
- metric : 거리 계산에 사용하는 메트릭->기본값:nan_eucidean(유클리드 거리 계산할때 누락된 값이 있는 경우 처리)
- copy : True인 경우, 원본 데이터는 변경되지 않고 새 데이터 배열 생성 / False인 경우, 원본 데이터가 대체 ->기본값:True
- add_indicator : True인 경우, 누락된 값이 있는 특성에 대한 인디케이터(지시자) 변수가 결과에 추가->기본값:False
Interpolate
Interpolate
주어진 데이터 포인트 사이에 새로운 데이터 포인트를 추정하는 수치 분석 방법
(pandas 라이트러리에서 결측치 보간에 사용)
- linear : 기본값 / 결측치를 양쪽의 값으로부터 선형적으로 추정 / 시계열 데이터에서 일반적 사용,데이터가 비교적 균일하게 분초된 경우 사용
- time : 시간 간격으로 고려 선형적으로 보간 / DatetimeIndex인 경우, 유용하게 사용 가능
- index,values : 인덱스 값에 기반하여 선형적으로 보간 / index(인덱스 자체), values(인덱스 값들) 기준으로 보간
- pad,ffill : 앞 방향으로 이전의 유효한 값으로 결측치 채움
- bfill,backfill : 뒷 방향으로 다음의 유효한 값으로 결측치 채움
- nearest : 결측치에서 가장 가까운 인덱스의 값으로 채움
- spline : spline은 차수를 지정 가능->order=3(3차 스플라인)
- zero(0차 스플라인), slinear(선형 스플라인), quadratic(2차 스플라인), cubic(3차 스플라인)
- polynomial : 다항식 보간을 수행->order옵션으로 차수 지정
- piecewise_polynomial : 각 세그먼트에서 다항식 보간을 수행->조각별 다항식 보간법
- from_derivatives : 미분 값으로부터 데이터 보간->고급사용자 사용,데이터의 미분값 아는 경우 사용
- akima : 3차 스플라인 보간법 사용->데이터 포인트 사이를 연결,국부적 데이터 변동성에 민감하게 반응
- krogh, piecewise_polynomial, pchip, akima, cubicspline : 각기 다른 종류의 스플라인 or 다항식 기반 보간법->데이터 특성과 필요에 따라 선택적 사용
- interpolate()메소드의 method 옵션 사용시, 데이터의 특성과 보간에 대한 목적 고려하여 방법 선택 중요!
결측치를 확인하고 대체하여 시각화 진행

csv파일을 불러와서 결측치가 존재하는지 확인
데이터프레임.isna():Na값이 존재하는지 확인
데이터프레임.isna().sum() : 각 컬럼에 몇개의 Na값이 존재하는지 확인


데이터 프레임에서 매트릭스와 바 형태로 Na값이 어디에 얼마나 있는지 확인 가능

dropna()
모든 결측치를 drop한다(없앤다)
여러 방법을 통해 디테일하게 drop 가능




df.dropna(how='all') : 하나의 컬럼이라도 na값이 있으면 없앤다
df.dropna(how='any') : 하나의 컬럼이라도 결측값이 있다면 그 행을 제외
df.dropna(thresh = 1) : 결측값 컬럼의 개수에 따른 제거
df.dropna(subset=['atemp']) : Subset은 특정 컬럼을 지정하여 결측치 없앤다

fillna()
결측치를 대체(값을 채운다)
fillna(0)/('0') : 단순하게 Na값을 0으로 대체 (숫자형/문자형)
여러 방법을 통해 디테일하게 대체 가능



fillna({'컬럼명':0}) : 특정 컬럼에 있는 결측치들을 0으로 대체
df.fillna(df.atemp.mean()) : 변수화한 값을 Na값에 대체
df.fillna(np.mean(df.atemp)) : numpy와 같이 사용 가능
(mean, max, min, median, std 등 가능)


시계열 데이터를 이용하는 경우
fillna(method = 'pad') : 바로 앞방향에 존재하는 값으로 결측치 채움
df.fillna(method = 'bfill') : 뒷 방향으로 다음의 유효한 값으로 결측치 채움
df.fillna(method = 'bfill',limit=2) : 연속적으로 결측값이 발생하는 경우 n번 대치 조건
보간법 - interpolate

Interpolate() 사용
method를 사용하여 디테일하게 보간 가능


시계열 데이터가 되어야 method = time으로 보간 가능
위 상황에서 pd.to_datetime으로 index 바꾸고 다시 보간
다양한 보간법으로 대체 -> 회귀 분석을 통해 평가 진행

mpg라는 데이터셋 불러오기
각 컬럼이 어떤 것을 뜻하는지 확인 (데이터 도메인 지식 쌓기)
mpg:연비
cylinders:실런더 개수
displacement:배기량
horsepower:마력
weight:무게
acceleration:제로백
model_year:모델연식
origin:개발국가
name:모델명

mpg의 Na값 존재하는지 확인하고 dropna()로 결측치 제거
df_x : 실린더, 배기량, 마력, 무게(독립변수)에 따라 mpg(종속변수) = 차량의 연비를 예측
df_x에 랜덤한 결측치 20개를 각 컬럼에 적용

이를 바탕으로 df_x와 기존의 mpg데이터프레임에서 mpg컬럼만 합치고
이를 다양한 대치를 사용해 결측치 대체 진행

평균대치
df_x의 각 컬럼의 평균값을 구하고
df_sp의 결측치가 있는지 확인하고
평균값을 Na값에 대체하고 결측치 있는지 확인

train_test_split : 학습을 위해 사용
x:독립 변수 데이터 : df_sp.drop('mpg',axis=1)
y:종속 변수 데이터 : df_sp['mpg']
test_size=0.3 : 테스트 세트 비율 -> 30%
random_state=111 :데이터 분할 시 랜덤성을 결정하는 숫자
회귀 분석을 진행하고 회귀 분석 모델을 만들고 적용

적용된 회귀 분석 모델에 따라 예측된 값과 기존의 값을 그래프로 시각화 진행
mse값을 찾아서 확인 -> mse의 값이 0에 가까울수록 모델이 실제값을 잘 예측한다는 의미



결측치 0으로 대치
df_sp1을 사용하여 결측치 있는지 확인후
결측치에 fillna(0)을 넣어서 결측치를 0으로 대치하고 결측치 있는지 확인

train_test_split : 학습을 위해 사용
x:독립 변수 데이터 : df_sp.drop('mpg',axis=1)
y:종속 변수 데이터 : df_sp['mpg']
test_size=0.3 : 테스트 세트 비율 -> 30%
random_state=111 :데이터 분할 시 랜덤성을 결정하는 숫자
회귀 분석을 진행하고 회귀 분석 모델을 만들고 적용

적용된 회귀 분석 모델에 따라 예측된 값과 기존의 값을 그래프로 시각화 진행
mse값을 찾아서 확인 -> mse의 값이 0에 가까울수록 모델이 실제값을 잘 예측한다는 의미

Interpolate(method = 'linear')을 사용하여 선형 보간 진행
이를 대치하여 결측치 존재하는지 확인


train_test_split : 학습을 위해 사용
x:독립 변수 데이터 : df_sp.drop('mpg',axis=1)
y:종속 변수 데이터 : df_sp['mpg']
test_size=0.3 : 테스트 세트 비율 -> 30%
random_state=111 :데이터 분할 시 랜덤성을 결정하는 숫자
회귀 분석을 진행하고 회귀 분석 모델을 만들고 적용
적용된 회귀 분석 모델에 따라 예측된 값과 기존의 값을 그래프로 시각화 진행
mse값을 찾아서 확인 -> mse의 값이 0에 가까울수록 모델이 실제값을 잘 예측한다는 의미

만약에 결측을 더 잘하고 싶었으면 수치만으로는 정답은 아니다
- 데이터 셋의 도메인을 더 잘이해하고 무엇을 기반으로 했는지 확인 -> 도메인 지식을 쌓기
- 선형인 것인가 고민해보고 어떤 것을 사용할지 고민하고 사용 -> 대치 방법을 고민하고 적절한 것으로 적용하기
- 시계열은 영향을 주고 경향성을 줄 수 있는 것이기 때문에 방법 선택 -> 시계열 데이터에서 Na값을 대치하는 방법 고민
- 대치한 값을 성능을 볼 때 모델을 선정하고 비교값을 기준으로 확인 -> 대치 방법도 중요하지만 모델과 그에 따른 비교값도 고민
- 단순하게 mse값만으로 성능을 측정하는 것은 좋지 않다 - 데이터 도메인이 중요 -> 전반적인 데이터를 해석하는 능력 기르기
https://linktr.ee/official.bdaa
BDA | Instagram | Linktree
Big Data Analysis | 빅데이터분석학회
linktr.ee
혹시 학회가 궁금하시거나 다음 기수에 참여하고 싶은 분들은 위 페이지에서 자세한 사항을 확인해주세요😃
'BDA 학회 > BDA학회_8기' 카테고리의 다른 글
[BDA 데이터분석 전처리 (Pandas) 4회차]_결측치와 대체 방법 정리 (0) | 2024.03.28 |
---|---|
[BDA 데이터분석 전처리 (Pandas) 3회차]_Pandas 기초 문법 정리2 (1) | 2024.03.19 |
[BDA 데이터분석 전처리 (Pandas) 2회차]_Pandas 기초 문법 정리 (0) | 2024.03.15 |