前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >稳博投资研究类笔试2024

稳博投资研究类笔试2024

原创
作者头像
量化投资和人工智能公众号
发布2024-06-28 16:35:51
1040
发布2024-06-28 16:35:51
举报

关注我们,每周发布最新的笔面试题目和解析

记得设为星标哦

前言

面向研究类的笔试题目,主要是数理统计和编程题,本次笔试时长三小时,整体五个题,分别是魔法跳棋、金融数据计算、机器学习题、数学题、物理题,本次给出其中的两题,剩下的题及全部解答在知识星球中获取。

暑期实习和笔试也陆陆续续开始了,欢迎同学们在公众号后台投稿,你们的每条留言小编都会仔细查看。累计投稿4场将获得知识星球100元优惠券,也可原价直接加入。更全的笔面试资料及学习路线在知识星球中,会随着资源的积累不断涨价,早加入早学习早拿offer!

1【机器学习题】

现有一大小为 m*n 的股票数据集,其包含了多支股票多天的特征数据(一支股票每天可能有 1000-5000 行

数据,m 大于 1000000),前两列为时间和股票代码,后 n-2 列为特征,现在想要对其作 1D-CNN 的回归训练(假设 kernel 个数为 1,kernel size 为 3),请简要描述该如何进行数据处理及模型训练,并画出 CNN 流

程图(每一层之间如何转化)。

【参考思路】

为了将这个大规模的股票数据集应用于1D-CNN的回归训练,需要进行以下数据处理和模型训练步骤:

数据处理步骤

1.数据清洗与预处理:

检查并处理缺失值和异常值。

对时间和股票代码进行编码(如可以将时间转换为时间戳,将股票代码转换为整数编码)。

2.数据归一化:

对后n-2列特征进行归一化处理,例如使用Min-Max归一化或标准化,以确保特征值在相同范围内。

3.生成样本:

将时间序列数据生成固定长度的滑动窗口样本。例如,对于每只股票,采用窗口大小为3的滑动窗口,从而生成特征矩阵。假设每个窗口包含3天的数据,特征列数为n-2。

4.数据分割:

将数据集划分为训练集、验证集和测试集。

模型训练步骤

1.模型定义:

定义1D-CNN模型,包括卷积层、池化层、全连接层和输出层。

2.模型编译:

编译模型,选择适当的损失函数(如均方误差)和优化器(如Adam)。

3.模型训练:

使用训练集数据进行模型训练,并使用验证集数据进行验证。可以采用早停法以避免过拟合。

4.模型评估:

使用测试集数据评估模型性能。

CNN流程图

代码语言:bash
复制
输入层
  |
  | [input_shape=(window_size, n_features)]
  v
1D卷积层 (kernel_size=3, filters=1)
  |
  | [output_shape=(window_size-2, 1)]
  v
全连接层 (units=1)
  |
  | [output_shape=(1)]
  v
输出层

数据处理代码示例(Python)

代码语言:python
代码运行次数:0
复制
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, Dense, Flatten

# 读取数据
data = pd.read_csv('stock_data.csv')

# 数据清洗与预处理
data.dropna(inplace=True)
data['timestamp'] = pd.to_datetime(data['timestamp']).astype(int) // 10**9
data['stock_code'] = data['stock_code'].astype('category').cat.codes

# 数据归一化
scaler = MinMaxScaler()
data.iloc[:, 2:] = scaler.fit_transform(data.iloc[:, 2:])

# 生成样本
window_size = 3
X, y = [], []
for stock in data['stock_code'].unique():
    stock_data = data[data['stock_code'] == stock]
    for i in range(len(stock_data) - window_size):
        X.append(stock_data.iloc[i:i+window_size, 2:].values)
        y.append(stock_data.iloc[i+window_size, 2].values)

X = np.array(X)
y = np.array(y)

# 数据分割
train_size = int(0.8 * len(X))
X_train, X_val_test = X[:train_size], X[train_size:]
y_train, y_val_test = y[:train_size], y[train_size:]

val_size = int(0.5 * len(X_val_test))
X_val, X_test = X_val_test[:val_size], X_val_test[val_size:]
y_val, y_test = y_val_test[:val_size], y_val_test[val_size:]

# 模型定义
model = Sequential()
model.add(Conv1D(filters=1, kernel_size=3, activation='relu', input_shape=(window_size, X.shape[2])))
model.add(Flatten())
model.add(Dense(1))

# 模型编译
model.compile(optimizer='adam', loss='mean_squared_error')

# 模型训练
model.fit(X_train, y_train, epochs=10, validation_data=(X_val, y_val))

# 模型评估
loss = model.evaluate(X_test, y_test)
print(f'Test Loss: {loss}')

2【金融数据计算】

现有一投资组合(附件 1),请利用所提供的行情数据(附件 2),计算 2021 年 11 月该组合相对于上

证指数的每日超额收益率。

提示:T 日收益率 = T 日收盘价 / T-1 日收盘价 -1

T 日超额收益率 = T 日组合收益率 - T 日上证指数收益率

结果四舍五入保留 4 位小数,存入 result.csv 文件,格式如下:

更多解答和参考思路在知识星球中获取......

思路或想法欢迎在留言区交流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1【机器学习题】
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档