html
회귀 분석 마스터하기: 자동차 가격 예측을 위한 종합 템플릿
자동차 가격 예측을 위해 전문가가 제작한 템플릿을 통해 회귀 분석의 잠재력을 최대한 활용하세요. 다양한 모델을 실험하든 다양한 회귀 문제를 해결하든, 이 가이드는 머신러닝 워크플로우를 간소화하기 위한 단계별 접근 방식을 제공합니다.
목차
- 머신러닝에서의 회귀 소개
- CarPrice 데이터셋 이해하기
- 환경 설정하기
-
데이터 전처리
- 결측치 처리
- 특징 선택
- 범주형 변수 인코딩
- 특징 스케일링
- 데이터셋 분할
-
모델 구축 및 평가
- 선형 회귀
- 다항 회귀
- 의사결정 나무 회귀
- 랜덤 포레스트 회귀
- AdaBoost 회귀
- XGBoost 회귀
- 서포트 벡터 회귀(SVR)
- 결론
- 회귀 템플릿 접근하기
머신러닝에서의 회귀 소개
회귀 분석은 머신러닝의 기본 요소로, 입력 특징을 기반으로 연속적인 결과를 예측할 수 있게 해줍니다. 부동산 가격 산정부터 주식 시장 예측에 이르기까지, 회귀 모델은 다양한 산업 분야에서 의사결정 과정에 중요한 역할을 합니다. 이 기사에서는 자동차 가격 예측에 특화된 Python을 사용하여 강력한 회귀 템플릿을 만드는 방법을 살펴보겠습니다.
CarPrice 데이터셋 이해하기
우리의 여정은 CarPrice 데이터셋으로 시작됩니다. 이 데이터셋은 Kaggle에서 가져왔으며, 25개의 필드와 약 206개의 레코드로 구성되어 있어 회귀 기법을 시연하기에 적절한 복잡성을 가지고 있습니다.
데이터셋 구조
데이터셋의 스냅샷은 다음과 같습니다:
car_ID
symboling
CarName
fueltype
aspiration
doornumber
carbody
drivewheel
enginelocation
wheelbase
...
price
1
3
alfa-romero giulia
gas
std
two
convertible
rwd
front
88.6
...
13495.0
2
3
alfa-romero stelvio
gas
std
two
convertible
rwd
front
88.6
...
16500.0
...
...
...
...
...
...
...
...
...
...
...
...
목표 변수는 price
로, 자동차의 가격을 달러 단위로 나타냅니다.
환경 설정하기
데이터를 다루기 전에 필요한 Python 라이브러리가 설치되어 있는지 확인하세요. 데이터 조작을 위해 pandas, 수치 연산을 위해 numpy, 모델 구축 및 평가를 위해 scikit-learn과 XGBoost를 사용할 것입니다.
12345678910111213
import pandas as pdimport numpy as npfrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import OneHotEncoder, StandardScalerfrom sklearn.compose import ColumnTransformerfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_scorefrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.ensemble import RandomForestRegressor, AdaBoostRegressorfrom sklearn.svm import SVRimport xgboost as xgb
데이터 전처리
결측치 처리
데이터의 청결함은 매우 중요합니다. 우리는 수치 데이터와 범주형 데이터의 결측치를 별도로 처리할 것입니다.
수치 데이터
수치 열의 경우, SimpleImputer를 사용하여 각 열의 평균으로 결측치를 채웁니다.
123456789
# Identify numerical columnsnumerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0]) # Initialize imputer for numerical dataimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') # Fit and transform the dataimp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols])
범주형 데이터
범주형 열의 경우, SimpleImputer를 사용하여 가장 빈번한 범주로 결측치를 채웁니다.
123456789
# Identify categorical columnsstring_cols = list(np.where((X.dtypes == object))[0]) # Initialize imputer for categorical dataimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # Fit and transform the dataimp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols])
특징 선택
모든 특징이 모델에 유의미하게 기여하지는 않습니다. 예를 들어, car_ID
열은 단순한 식별자일 뿐 예측 가치를 제공하지 않습니다. 이러한 불필요한 열은 삭제할 것입니다.
12
# Drop the car_ID columnX.drop('car_ID', axis=1, inplace=True)
범주형 변수 인코딩
머신러닝 모델은 숫자 입력을 필요로 합니다. 우리는 원-핫 인코딩을 사용하여 범주형 변수를 숫자 형식으로 변환할 것입니다.
12345678
# Initialize OneHotEncoder within ColumnTransformercolumnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), string_cols)], remainder='passthrough') # Transform the dataX = columnTransformer.fit_transform(X)
인코딩 후, 데이터셋의 형태가 (205, 24)에서 (205, 199)로 변경되어 범주형 변수의 성공적인 변환을 나타냅니다.
특징 스케일링
스케일링은 특히 거리 기반 알고리즘에서 모든 특징이 결과에 동일하게 기여하도록 보장합니다.
1234567
# Initialize StandardScalersc = StandardScaler(with_mean=False) # Fit and transform the training datasc.fit(X_train)X_train = sc.transform(X_train)X_test = sc.transform(X_test)
데이터셋 분할
데이터셋을 훈련 세트와 테스트 세트로 나누어 모델의 성능을 평가할 것입니다.
1234
# Split the dataX_train, X_test, y_train, y_test = train_test_split( X, Y, test_size=0.20, random_state=1)
- 훈련 세트: 164 샘플
- 테스트 세트: 41 샘플
모델 구축 및 평가
다양한 회귀 모델을 탐구하고 각 모델을 R² 점수를 사용하여 평가할 것입니다.
1. 선형 회귀
연속적인 값을 예측하는 간단한 접근 방식입니다.
1234
model = LinearRegression()model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.0974
R² 점수는 선형 모델이 약 9.74%의 분산을 설명함을 나타냅니다.
2. 다항 회귀
다항 특징을 도입하여 비선형 관계를 포착합니다.
12345678
poly = PolynomialFeatures(degree=2)X_train_poly = poly.fit_transform(X_train)X_test_poly = poly.transform(X_test) model = LinearRegression()model.fit(X_train_poly, y_train)y_pred = model.predict(X_test_poly)print(r2_score(y_test, y_pred)) # Output: -0.4531
음의 R² 점수는 과적합 또는 부적절한 차수 선택을 시사합니다.
3. 의사결정 나무 회귀
데이터를 하위 집합으로 분할하는 비선형 모델입니다.
1234
model = DecisionTreeRegressor(max_depth=4)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8840
R² 점수가 상당히 높아 더 나은 성능을 나타냅니다.
4. 랜덤 포레스트 회귀
여러 개의 의사결정 나무를 구축하는 앙상블 방법입니다.
1234
model = RandomForestRegressor(n_estimators=25, random_state=10)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.9108
91.08%의 인상적인 R² 점수로 강력한 성능을 보여줍니다.
5. AdaBoost 회귀
약한 학습자를 결합하여 강력한 예측기를 형성하는 부스팅 기술입니다.
1234
model = AdaBoostRegressor(random_state=0, n_estimators=100)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8807
88.07%의 R² 점수를 달성합니다.
6. XGBoost 회귀
경사 부스팅의 확장 가능하고 효율적인 구현입니다.
12345678910
model = xgb.XGBRegressor( n_estimators=100, reg_lambda=1, gamma=0, max_depth=3, learning_rate=0.05)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8947
89.47%의 R² 점수를 제공합니다.
7. 서포트 벡터 회귀(SVR)
고차원 공간에서 효과적이며, 비선형 데이터를 위해 커널 트릭을 사용합니다.
1234
model = SVR()model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: -0.0271
음의 R² 점수는 성능이 좋지 않음을 나타내며, 매개변수 튜닝이 필요할 수 있습니다.
결론
이 종합적인 회귀 템플릿은 데이터 전처리부터 모델 평가까지 회귀 문제를 체계적으로 처리하는 접근 방식을 제공합니다. 선형 회귀와 같은 단순한 모델은 부족할 수 있지만, 랜덤 포레스트와 XGBoost와 같은 앙상블 방법은 자동차 가격 예측에서 우수한 성능을 보입니다. 이 템플릿을 특정 데이터셋에 맞게 조정하면 예측 정확도를 향상시키고 머신러닝 프로젝트를 간소화할 수 있습니다.
회귀 템플릿 접근하기
이 회귀 워크플로우를 구현할 준비가 되셨나요? 전체 Jupyter Notebook과 CarPrice.csv 데이터셋을 여기서 확인하세요. 이 리소스를 활용하여 머신러닝 프로젝트를 시작하고 정확한 예측 모델을 손쉽게 구축하세요.
오늘 회귀 분석 기술을 향상시키고 데이터 기반 의사결정에서 새로운 기회를 열어보세요!