import pandas as pd
import numpy as np
from lightgbm import LGBMRegressor
from xgboost import XGBRegressor
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import QuantileTransformer, LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesRegressor, BaggingRegressor, VotingRegressor
from sklearn.linear_model import HuberRegressor
# ------------------------------
# 1. Загрузка данных
# ------------------------------
train = pd.read_csv("train (40).csv").drop(["id", "date", "g_lift"], axis=1)
y_train = train["price"]
train.drop("price", axis=1, inplace=True)
test = pd.read_csv("test (35).csv").drop(["date", "g_lift"], axis=1)
test_id = test["id"]
test.drop("id", axis=1, inplace=True)
X_train = pd.DataFrame(train[["area", "rooms", "balcon", "metro_dist", "street_id"]])
X_test = pd.DataFrame(test[["area", "rooms", "balcon", "metro_dist", "street_id"]])
# ------------------------------
# 3. Базовые модели
# ------------------------------
lgbm = LGBMRegressor(
device="gpu",
n_estimators=1000,
learning_rate=0.05,
num_leaves=31,
subsample=0.8,
colsample_bytree=0.8,
random_state=42,
verbose=-1,
)
xgb = XGBRegressor(
device="cuda",
n_estimators=1000,
learning_rate=0.05,
max_depth=6,
subsample=0.8,
colsample_bytree=0.8,
random_state=42,
verbosity=0,
)
# ------------------------------
# 4. VotingRegressor с TransformedTargetRegressor
# ------------------------------
voting = VotingRegressor([
("lgbm", lgbm),
("xgb", xgb),
], weights=[1, 1])
model = TransformedTargetRegressor(
regressor=voting,
transformer=QuantileTransformer(output_distribution="normal")
)
# ------------------------------
# 5. Кросс-валидация
# ------------------------------
"""score = cross_val_score(model, X_train, y_train,
scoring="neg_mean_absolute_error", cv=5, n_jobs=-1)
print("VotingRegressor cross-val scores (neg_MAE):", score)
print("Mean CV score:", score.mean())"""
model.fit(X_train, y_train)
# ------------------------------
# 10. Предсказание (раскомментируй при необходимости)
# ------------------------------
pred = model.predict(X_test)
result = pd.DataFrame({
"id": test_id,
"price": pred
})
print("\nПример предсказаний:")
print(result.head(10))
result.to_csv("result.csv", index=False)