我得到了一个航班预测数据集,我想尝试一下我的机器学习技能。
我清理了数据并修复了一些新功能并删除了其他功能 我还得到了一些有价值的数据。但是当我尝试做出预测并评估我的模型时 这就是我得到的答案!那是在我用 SearchGridCV 调整我的模型之后
Regression metrics on the test set
r2: 82.10%
mean_absolute_error: 1229.1407307097613
mean_squared_error: 2933265.159841384
model = RandomForestRegressor(
max_depth=20,
max_features='sqrt',
min_samples_leaf=2,
min_samples_split=5,
n_estimators=200
)
X = df.drop('Price',axis=1)
y = df['Price']
X_train, X_test, y_train, y_test = train_test_split(
pd.get_dummies(X)
, y, test_size=0.2, random_state=42)
model.fit(X_train,y_train)
y_preds = model.predict(X_test)
我尝试修改超参数并删除一些异常值
def remove_outliers_iqr(df, column):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]
numerical_columns = ['Price', 'Dep_hours', 'Dep_min', 'Arrival_hours', 'Arrival_min', 'Duration_hours', 'Duration_min']
for column in numerical_columns:
df = remove_outliers_iqr(df, column)
但我仍然得到相同的结果
这是完整的笔记本,因为我不知道以笔记本方式在此处附加整个代码
正在遇到一个常见问题,在机器学习中,这个问题与模型性能本身无关,而与数据的规模有关。简单来说,由于的航班价格(可能在几百到几千美元之间)的范围很广,因此即使是表现良好的模型,其错误指标看起来也很高。让我们来分析一下:
-
的指标并不像看起来那么糟糕: 2933265 的 MSE 听起来很吓人,但请记住,这是误差的平方。它的平方根,即 RMSE(均方根误差)约为 1712,考虑到机票价格范围,这更易于理解。同样,平均绝对误差 1229 美元意味着,平均而言,的模型的预测值与实际机票价格相差约 1229 美元。
-
上下文至关重要: 82.10% 的 R 平方分数实际上非常不错。这表明的模型解释了机票价格差异的很大一部分。然而,在预测价格时,始终存在限制因素(例如,航空公司使用的动态定价策略,我们无法完全捕捉到)。
改进建议:
-
特征工程:
- 日期信息: 从“出发日期”中提取宝贵的特征,如“月份”、“星期几”和“是否为节假日”。机票价格在一年和一周中的不同时间差别很大。
- 航线: 创建航线特征(例如,“出发城市”-“到达城市”)或使用出发地/目的地受欢迎程度。
- 中途停留: 如果有数据,请说明航班是否有中途停留。
- 时间段: 根据“出发时间”和“到达时间”创建类别,例如“早晨”、“下午”、“红色航班”。
-
尝试不同的模型:
随机森林通常表现良好,但也可以尝试其他回归模型:
- XGBoost 或 LightGBM: 这些是强大的基于树的模型,通常优于随机森林。
- 梯度提升: 以其准确性而著称。
- 交叉验证: 使用更稳健的交叉验证技术,如 K 折交叉验证,以获得模型性能的更可靠评估。
调试的方法:
- 残差分析: 绘制预测价格与实际价格之间的差异图(残差)。寻找模式可以揭示模型难以预测的特定价格范围或航班类型。
- 特征重要性: 检查的随机森林模型中哪些特征最重要。这可以提供有关哪些因素在推动价格方面最具预测性的见解,并可能指导进行进一步的特征工程。
请记住: 在预测机票价格等复杂问题时,完美的准确性几乎是不可能的。专注于改进的模型,以获得对价格趋势的可靠理解并最小化预测误差,同时也要认识到固有的不确定性。
如果有任何其他问题或想深入探讨特定方面,请随时提出!
标签:python,machine-learning,scikit-learn,random-forest From: 78770230