{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":96164,"databundleVersionId":11418275,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-06-19T10:49:13.23801Z","iopub.execute_input":"2025-06-19T10:49:13.238733Z","iopub.status.idle":"2025-06-19T10:49:13.24943Z","shell.execute_reply.started":"2025-06-19T10:49:13.238689Z","shell.execute_reply":"2025-06-19T10:49:13.248328Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 导入必要的库\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport os\n\n# 检查数据集目录\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# 加载数据\ntrain_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet')\ntest_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet')\n\n# 查看数据的基本信息\nprint(\"训练数据的基本信息：\")\nprint(train_data.info())\nprint(\"\\n测试数据的基本信息：\")\nprint(test_data.info())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-19T10:49:13.251199Z","iopub.execute_input":"2025-06-19T10:49:13.251552Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 检查缺失值\nprint(\"训练数据的缺失值情况：\")\nprint(train_data.isnull().sum())\nprint(\"\\n测试数据的缺失值情况：\")\nprint(test_data.isnull().sum())\n\n# 检查列名\nprint(\"\\n训练数据的列名：\")\nprint(train_data.columns)\n\n# 查看数据结构\nprint(\"\\n训练数据的前五行：\")\nprint(train_data.head())\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 简单的数据可视化\n# 目标变量的分布\nplt.figure(figsize=(10, 6))\nsns.histplot(train_data['label'], bins=50, kde=True)\nplt.title('目标变量（label）的分布')\nplt.xlabel('目标值')\nplt.ylabel('频率')\nplt.show()\n\n# 特征X1的分布\nplt.figure(figsize=(10, 6))\nsns.histplot(train_data['X1'], bins=50, kde=True)\nplt.title('特征X1的分布')\nplt.xlabel('X1值')\nplt.ylabel('频率')\nplt.show()\n\n# 时间戳与目标变量的关系（抽样数据）\nsample_data = train_data.sample(n=1000, random_state=42)\nplt.figure(figsize=(12, 6))\nplt.scatter(sample_data.index, sample_data['label'], alpha=0.5)\nplt.title('时间戳与目标变量的关系（抽样数据）')\nplt.xlabel('时间戳（索引）')\nplt.ylabel('目标值')\nplt.show()\n\n# 特征相关性分析\nselected_features = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'X1', 'label']\ncorr_matrix = train_data[selected_features].corr()\nplt.figure(figsize=(10, 8))\nsns.heatmap(corr_matrix, annot=True, cmap='coolwarm', square=True)\nplt.title('部分特征的相关性矩阵')\nplt.show()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 导入必要的库\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LinearRegression, LogisticRegression\nfrom sklearn.metrics import mean_squared_error, accuracy_score\n\n# 特征和目标变量的选择\nfeatures = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'X1']\nX = train_data[features]\ny = train_data['label']\n\n# 划分训练集和验证集\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# 特征标准化\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 初始化线性回归模型\nlr_model = LinearRegression()\n\n# 训练线性回归模型\nlr_model.fit(X_train_scaled, y_train)\n\n# 在训练集上进行预测\ny_train_pred_lr = lr_model.predict(X_train_scaled)\n\n# 计算训练集上的均方误差（MSE）\ntrain_mse_lr = mean_squared_error(y_train, y_train_pred_lr)\nprint(f'线性回归 - 训练集上的均方误差（MSE）：{train_mse_lr}')\n\n# 在验证集上进行预测\ny_val_pred_lr = lr_model.predict(X_val_scaled)\n\n# 计算验证集上的均方误差（MSE）\nval_mse_lr = mean_squared_error(y_val, y_val_pred_lr)\nprint(f'线性回归 - 验证集上的均方误差（MSE）：{val_mse_lr}')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 特征重要性分析（线性回归的系数）\nfeature_importance_lr = pd.DataFrame({\n    '特征': features,\n    '系数': lr_model.coef_\n}).sort_values(by='系数', ascending=False)\n\nprint(\"\\n线性回归 - 特征系数：\")\nprint(feature_importance_lr)\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import accuracy_score\n\n# 设置随机种子以保证结果可复现\nnp.random.seed(42)\n\n# 加载数据 - 确保train_data被正确定义\ntrain_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet')\ntest_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet')\n\n# 查看数据的列名\nprint(\"训练数据的列名：\")\nprint(train_data.columns)\n\n# 数据预处理步骤（根据实际情况调整）\n# 例如：处理缺失值、特征工程、时间特征提取等\n# 这里添加简单的缺失值处理\ntrain_data.fillna(method='ffill', inplace=True)\n\n# 假设目标列名为'label'，而不是'target'，我们需要根据实际情况进行调整\ntarget_column = 'label'  # 根据实际情况修改这里\n\n# 创建分类目标（如果原始目标是连续的）\n# 例如：1表示价格上涨，0表示价格下跌\ntrain_data['target_class'] = np.where(train_data[target_column] > 0, 1, 0)\n\n# 分割特征和目标变量\nfeatures = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'X1']\nX = train_data[features]\ny = train_data['target_class']\n\n# 划分训练集和验证集\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# 标准化特征\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 初始化逻辑回归模型\nlogr_model = LogisticRegression(max_iter=1000)\n\n# 训练逻辑回归模型\nlogr_model.fit(X_train_scaled, y_train)\n\n# 在训练集上进行预测\ny_train_pred_logr = logr_model.predict(X_train_scaled)\n\n# 计算训练集上的准确率\ntrain_acc_logr = accuracy_score(y_train, y_train_pred_logr)\nprint(f'\\n逻辑回归 - 训练集上的准确率（Accuracy）：{train_acc_logr:.4f}')\n\n# 在验证集上进行预测\ny_val_pred_logr = logr_model.predict(X_val_scaled)\n\n# 计算验证集上的准确率\nval_acc_logr = accuracy_score(y_val, y_val_pred_logr)\nprint(f'逻辑回归 - 验证集上的准确率（Accuracy）：{val_acc_logr:.4f}')\n\n# 特征重要性分析（逻辑回归的系数）\nfeature_importance_logr = pd.DataFrame({\n    '特征': features,\n    '系数': logr_model.coef_[0]\n}).sort_values(by='系数', ascending=False)\n\nprint(\"\\n逻辑回归 - 特征系数：\")\nprint(feature_importance_logr)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 对测试集进行预测并提交\nX_test = test_data[features]\nX_test_scaled = scaler.transform(X_test)\n\ntest_pred_logr = logr_model.predict(X_test_scaled)\n\n# 创建提交文件\nsubmission_logr = pd.DataFrame({\n    'ID': test_data.index,\n    'label': test_pred_logr\n})\nsubmission_logr.to_csv('submission_logr.csv', index=False)\nprint(\"逻辑回归 - 提交文件已保存为 'submission_logr.csv'\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LinearRegression, LogisticRegression\nfrom sklearn.metrics import mean_squared_error, accuracy_score\n\n# 设置随机种子以保证结果可复现\nnp.random.seed(42)\n\n# 加载数据 - 确保train_data被正确定义\ntrain_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet')\ntest_data = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet')\n\n# 查看数据的列名\nprint(\"训练数据的列名：\")\nprint(train_data.columns)\n\n# 数据预处理步骤（根据实际情况调整）\n# 例如：处理缺失值、特征工程、时间特征提取等\n# 这里添加简单的缺失值处理\ntrain_data.fillna(method='ffill', inplace=True)\n\n# 假设目标列名为'label'，而不是'target'，我们需要根据实际情况进行调整\ntarget_column = 'label'  # 根据实际情况修改这里\n\n# 创建分类目标（如果原始目标是连续的）\n# 例如：1表示价格上涨，0表示价格下跌\ntrain_data['target_class'] = np.where(train_data[target_column] > 0, 1, 0)\n\n# 分割特征和目标变量\nfeatures = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'X1']\nX = train_data[features]\ny_reg = train_data[target_column]  # 回归目标\ny_cls = train_data['target_class']  # 分类目标\n\n# 划分训练集和验证集\nX_train, X_val, y_train, y_val = train_test_split(X, y_reg, test_size=0.2, random_state=42)\nX_train_cls, X_val_cls, y_train_cls, y_val_cls = train_test_split(X, y_cls, test_size=0.2, random_state=42)\n\n# 标准化特征\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)\nX_train_cls_scaled = scaler.fit_transform(X_train_cls)\nX_val_cls_scaled = scaler.transform(X_val_cls)\n\n# 初始化线性回归模型\nlr_model = LinearRegression()\n\n# 训练线性回归模型\nlr_model.fit(X_train_scaled, y_train)\n\n# 在训练集上进行预测\ny_train_pred_lr = lr_model.predict(X_train_scaled)\n\n# 计算训练集上的均方误差（MSE）\ntrain_mse_lr = mean_squared_error(y_train, y_train_pred_lr)\n\n# 在验证集上进行预测\ny_val_pred_lr = lr_model.predict(X_val_scaled)\n\n# 计算验证集上的均方误差（MSE）\nval_mse_lr = mean_squared_error(y_val, y_val_pred_lr)\n\n# 初始化逻辑回归模型\nlogr_model = LogisticRegression(max_iter=1000)\n\n# 训练逻辑回归模型\nlogr_model.fit(X_train_cls_scaled, y_train_cls)\n\n# 在训练集上进行预测\ny_train_pred_logr = logr_model.predict(X_train_cls_scaled)\n\n# 计算训练集上的准确率\ntrain_acc_logr = accuracy_score(y_train_cls, y_train_pred_logr)\n\n# 在验证集上进行预测\ny_val_pred_logr = logr_model.predict(X_val_cls_scaled)\n\n# 计算验证集上的准确率\nval_acc_logr = accuracy_score(y_val_cls, y_val_pred_logr)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 评估模型的拟合情况\nprint(\"\\n模型评估：\")\nprint(f\"线性回归 - 训练集 MSE: {train_mse_lr:.4f}\")\nprint(f\"线性回归 - 验证集 MSE: {val_mse_lr:.4f}\")\nprint(f\"逻辑回归 - 训练集 Accuracy: {train_acc_logr:.4f}\")\nprint(f\"逻辑回归 - 验证集 Accuracy: {val_acc_logr:.4f}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 检查模型是否过拟合或欠拟合\nif val_mse_lr > train_mse_lr * 1.5:\n    print(\"\\n线性回归 - 警告：模型可能存在过拟合现象。\")\nelif val_mse_lr < train_mse_lr * 0.8:\n    print(\"\\n线性回归 - 警告：模型可能存在欠拟合现象。\")\nelse:\n    print(\"\\n线性回归 - 模型拟合情况良好。\")\n\nif val_acc_logr < train_acc_logr * 0.8:\n    print(\"\\n逻辑回归 - 警告：模型可能存在过拟合现象。\")\nelif val_acc_logr > train_acc_logr * 1.2:\n    print(\"\\n逻辑回归 - 警告：模型可能存在欠拟合现象。\")\nelse:\n    print(\"\\n逻辑回归 - 模型拟合情况良好。\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 对测试集进行预测并提交\nX_test = test_data[features]\nX_test_scaled = scaler.transform(X_test)\n\ntest_pred_logr = logr_model.predict(X_test_scaled)\n\n# 创建提交文件\nsubmission_logr = pd.DataFrame({\n    'ID': test_data.index,\n    'prediction': test_pred_logr  # 修改列名为 'prediction'\n})\nsubmission_logr.to_csv('submission_logr.csv', index=False)\nprint(\"逻辑回归 - 提交文件已保存为 'submission_logr.csv'\")","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}