稳博投资研究类笔试2024

2024-06-28 16:35:51 浏览数 (1)

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

记得设为星标哦

前言

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

暑期实习和笔试也陆陆续续开始了,欢迎同学们在公众号后台投稿,你们的每条留言小编都会仔细查看。累计投稿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 文件,格式如下:

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

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

0 人点赞