본문 바로가기
Computer Science/Machine Learning

데이터 전처리 [통신사 고객 이탈 예측 문제] (3)

by BaekDaBang 2024. 6. 9.

1. Data Preprocessing

(1) Train과 Test 데이터 자료형 확인

train.info()

test.info()

 

(2) Churn

y_train, y_test에 들어갈 자료로, label encoder를 이용하여 labeling해준다.

x_train = train.drop(['Churn'], axis=1)
y_train = train['Churn']
x_test = test
le = LabelEncoder()
y_train = le.fit_transform(y_train)
y_train = pd.DataFrame(y_train)

 

(3) index, Unnamed: 0, customerID

예측에 영향을 끼치지 않는 정보로 삭제

x_train = x_train.iloc[:,3:]
x_test = x_test.iloc[:,3:]

 

(4) 자료형이 object인 데이터

자료형이 object로, label encoder를 이용하여 labeling 진행

columns = ['gender', 'Partner', 'Dependents', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling', 'PaymentMethod']

for column in columns:
    le = LabelEncoder()
    x_train[column] = le.fit_transform(x_train[column])
    x_test[column] = le.transform(x_test[column])

 

(5) TotalCharges

x_train['TotalCharges']에서 NaN 값이 들어있는 부분을 제외하고 학습

(x_train['TotalCharges'] == ' ').sum()  # NaN 값의 개수 : 10

 

train과 test 데이터의 자료형이 달라, test 데이터와 같이 train 데이터의 자료형을 object에서 float64로 맞춤

drop_idx = x_train[x_train['TotalCharges'] == ' '].index

x_train = x_train.drop(drop_idx, axis=0)
y_train = y_train.drop(drop_idx, axis=0)

x_train['TotalCharges'] = x_train['TotalCharges'].astype('float64')

 

(6) Train과 Test 데이터 자료형 확인

x_train.info()

x_test.info()

 

2. Train & Test

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(max_iter=1000)
clf.fit(x_train, y_train)
y_test = clf.predict(x_test)