提交 2bb9afe4 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 d92065e4
...@@ -3,6 +3,7 @@ import md5 from 'blueimp-md5' ...@@ -3,6 +3,7 @@ import md5 from 'blueimp-md5'
import { fetchEventSource, FetchEventSourceInit } from '@fortaine/fetch-event-source' import { fetchEventSource, FetchEventSourceInit } from '@fortaine/fetch-event-source'
import { AIData, AIMessage, InitOptions } from './types' import { AIData, AIMessage, InitOptions } from './types'
import { extractJSON } from '@/utils/helper' import { extractJSON } from '@/utils/helper'
import { message } from 'antd'
export async function fetchAIEventSource(url: string, options: FetchEventSourceInit) { export async function fetchAIEventSource(url: string, options: FetchEventSourceInit) {
await fetchEventSource(url, { await fetchEventSource(url, {
...@@ -166,9 +167,10 @@ export async function openAI(data: AIData, options: InitOptions): Promise<void> ...@@ -166,9 +167,10 @@ export async function openAI(data: AIData, options: InitOptions): Promise<void>
} }
options.onMessage?.(message) options.onMessage?.(message)
options.onclose?.() options.onclose?.()
} catch (error) { } catch (error: any) {
console.error(error) console.error(error)
options.onerror?.(error) options.onerror?.(error)
message.error(error.response.data.error)
} }
} }
......
...@@ -47,41 +47,54 @@ const usePattern = (type = 'horizontal', color = '#5470C6') => { ...@@ -47,41 +47,54 @@ const usePattern = (type = 'horizontal', color = '#5470C6') => {
} }
} }
const transformData = (data: any[], yField: string[], yRule: string, ySort: string) => { const transformData = (data: any[], yField: string[], yRule: string, ySort: string, xField: string = '') => {
let transformedData = [...data] let transformedData = [...data]
// Apply calculation rule // Apply calculation rule
if (yRule) { if (yRule) {
transformedData = transformedData.map((item) => { // Group data by xField if it exists
const newItem = { ...item } const groupedData = xField
? transformedData.reduce((acc: Record<string, any[]>, item) => {
const key = item[xField]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(item)
return acc
}, {})
: { all: transformedData }
// Calculate results for each group
transformedData = Object.entries(groupedData).map(([_, group]) => {
const newItem = { ...group[0] }
yField.forEach((field) => { yField.forEach((field) => {
const values = data.map((d) => parseFloat(d[field]) || 0) const values = group.map((d) => parseFloat(d[field]) || 0)
let result = 0 let result = 0
switch (yRule) { switch (yRule) {
case 'sum': case 'sum':
result = values.reduce((a, b) => a + b, 0) result = Number(values.reduce((a, b) => a + b, 0).toFixed(2))
break break
case 'avg': case 'avg':
result = values.reduce((a, b) => a + b, 0) / values.length result = Number((values.reduce((a, b) => a + b, 0) / values.length).toFixed(2))
break break
case 'count': case 'count':
result = values.length result = values.length
break break
case 'max': case 'max':
result = Math.max(...values) result = Number(Math.max(...values).toFixed(2))
break break
case 'min': case 'min':
result = Math.min(...values) result = Number(Math.min(...values).toFixed(2))
break break
case 'median': { case 'median': {
const sorted = [...values].sort((a, b) => a - b) const sorted = [...values].sort((a, b) => a - b)
const mid = Math.floor(sorted.length / 2) const mid = Math.floor(sorted.length / 2)
result = sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid] result = Number((sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid]).toFixed(2))
break break
} }
case 'variance': { case 'variance': {
const mean = values.reduce((a, b) => a + b, 0) / values.length const mean = values.reduce((a, b) => a + b, 0) / values.length
result = values.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / values.length result = Number((values.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / values.length).toFixed(2))
break break
} }
} }
...@@ -131,7 +144,7 @@ export default function Chart({ ...@@ -131,7 +144,7 @@ export default function Chart({
return null return null
} }
const datalist = transformData(data.list, yField, yRule, ySort) const datalist = transformData(data.list, yField, yRule, ySort, xField)
const dataset = { dimensions: [xField, ...yField].filter(Boolean), source: datalist } const dataset = { dimensions: [xField, ...yField].filter(Boolean), source: datalist }
let defaultOptions: any = { let defaultOptions: any = {
......
...@@ -15,48 +15,7 @@ Apriori算法设计需求说明,结构化分析和建模建议 ...@@ -15,48 +15,7 @@ Apriori算法设计需求说明,结构化分析和建模建议
- 业务价值目标(如"提升交叉销售转化率10%") - 业务价值目标(如"提升交叉销售转化率10%")
2. 特征工程与事务准备 2. 模型输入设计
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 商品名称 | 转为事务列表 | 核心交易项,用于挖掘关联规则 |
| 品类 | 转为事务列表 | 分析品类间的共现模式 |
| 用户ID(可选) | 分组分析 按用户挖掘个性化购买模式 |
排除字段:
| 字段名 | 排除原因 |
| 订单时间 | 无直接关联规则挖掘价值 |
| 物流信息 | 与购买行为无关 |
(2) 特征处理建议:
事务格式要求:
- 数据需转换为\`[[事务1商品列表], [事务2商品列表], ...]\`格式
- 示例:\`[["T恤", "牛仔裤"], ["连衣裙", "帆布鞋"]]\`
缺失值处理:
- 策略:删除空值或填充(如"其他"类别)
数据降维:
- 是否需要合并商品层级?[是/否及理由](如"合并到品类层级以减少项数量")
3. 模型输入设计
事务数据格式: 事务数据格式:
订单ID | 购买项列表 订单ID | 购买项列表
...@@ -65,66 +24,11 @@ Apriori算法设计需求说明,结构化分析和建模建议 ...@@ -65,66 +24,11 @@ Apriori算法设计需求说明,结构化分析和建模建议
A456 | [连衣裙, 氨纶材质] A456 | [连衣裙, 氨纶材质]
参数配置建议: 3. 输出格式要求
\`min_support\`:[建议值及理由](如"设置为0.05以筛选高频项集")
\`min_confidence\`:[建议值及理由](如"设置为0.6以保证规则实用性")
4. 算法实现建议
模型适配性:
是否适合Apriori?[是/否及理由]
若否,推荐调整:
尝试FP-Growth(如"数据规模过大时更高效")
关键参数建议:
\`min_support\`:0.03-0.1(高频商品组合筛选)
\`min_confidence\`:0.5+(保证规则可信度)
\`max_length\`:5(限制规则复杂度)
业务规则过滤:
推荐设置\`min_lift>1.5\`以筛选强关联规则(如"购买T恤的用户更可能购买配套裤子")
计算资源建议:
特征维度>100时,建议先进行商品聚类降维
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标] 1. 问题定义:[一句话描述业务问题及目标]
2. 事务构建建议: 2. 事务构建建议:
- 保留字段:[字段列表及处理方式和理由] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
高频项集:
强关联规则:
4. 模型建议:
参数配置:
\`min_support=0.05\`(筛选高频商品组合)
\`min_confidence=0.6\`(保证业务价值)
业务验证方式:
推荐验证方法:人工审核规则合理性(如"是否符合业务常识")
关键评估指标:lift值、置信度、支持度 `
...@@ -8,107 +8,19 @@ export const prompt = `任务目标 ...@@ -8,107 +8,19 @@ export const prompt = `任务目标
请明确回答以下问题: 请明确回答以下问题:
1. 1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等) 核心问题 :该数据集拟解决的业务问题是什么?(例如预测销售额、分析用户行为影响因素等)
2. 2.
因变量(目标)选择 : 因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。
字段名:[目标变量字段名] 2. 模型输入设计
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 与因变量信息增益高、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议:
分类特征:
- 编码方式:[标签编码/One-Hot](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X):
自变量(X) :具体字段名称
字段列表及预处理方法:
因变量(Y) :字段名称
[字段A]:标签编码 → 转换为整数类型
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议 3. 输出格式要求
模型适配性:
是否适合随机森林?[是/否及理由]
若否,推荐调整:
尝试XGBoost/梯度提升树(如"特征间交互复杂,需更深度学习")
关键参数建议:
\`n_estimators\`:[建议值及理由](如"设置为100以平衡计算效率与精度")
\`max_depth\`:[建议值及理由](如"防止过拟合,设置为5")
\`max_features\`:[建议值及理由](如"sqrt型特征子集")
\`class_weight\`:[平衡/不均衡](如"类别分布不均衡时设置'balanced'")
计算资源建议:
是否需要特征选择?[是/否及方法](如"使用特征重要性筛选Top 10字段")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、特征重要性图表]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
...@@ -117,20 +29,4 @@ export const prompt = `任务目标 ...@@ -117,20 +29,4 @@ export const prompt = `任务目标
3. 自变量选择: 3. 自变量选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
...@@ -15,50 +15,9 @@ FP-Growth算法设计需求说明,结构化分析和建模建议 ...@@ -15,50 +15,9 @@ FP-Growth算法设计需求说明,结构化分析和建模建议
- 业务价值目标(如"提升购物车添加率10%") - 业务价值目标(如"提升购物车添加率10%")
2. 特征工程与事务构建
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 品类 | 直接使用 | 核心商品分类维度 |
| 颜色 | 直接使用 | 影响购买组合的因素 |
| 材质 | 直接使用 | 商品属性关联性分析 |
| 优惠类型 | 直接使用 | 购买决策驱动因素 |
排除字段:
| 字段名 | 排除原因 |
| 订单ID | 无业务解释性 |
| 用户年龄 | 非事务型特征 |
| 交易时间 | 与关联规则无直接关系 |
(2) 数据转换建议: 2. 模型输入设计
事务格式要求:
- 将数据转换为\`订单ID→[购买项列表]\`的事务格式(如\`订单A→[连衣裙_红色_氨纶, T恤_白色_棉质]\`)
缺失值处理:
- 策略:[删除/填充](如"空购物车订单需排除")
特征组合建议:
- 是否组合字段?[是/否及示例](如"将'品类+颜色+材质'合并为复合项以提升规则实用性")
3. 模型输入设计
事务数据格式: 事务数据格式:
订单ID | 购买项列表 订单ID | 购买项列表
...@@ -67,64 +26,11 @@ FP-Growth算法设计需求说明,结构化分析和建模建议 ...@@ -67,64 +26,11 @@ FP-Growth算法设计需求说明,结构化分析和建模建议
A456 | [连衣裙, 氨纶材质] A456 | [连衣裙, 氨纶材质]
参数配置建议: 3. 输出格式要求
\`min_support\`:[建议值及理由](如"设置为0.03以筛选高频商品组合")
\`min_threshold\`:[建议值及理由](如"设置为0.5以保证规则实用性")
4. 算法实现建议
模型适配性:
是否适合FP-Growth?[是/否及理由]
若否,推荐调整:
尝试Apriori(如"小规模数据或低维度场景")
关键参数建议:
\`min_support=0.03-0.05\`(高频项集筛选)
\`use_collector=True\`(优化内存占用)
业务规则过滤:
推荐设置\`min_confidence>0.5\`和\`lift>2\`筛选强关联规则
计算资源建议:
特征维度>100时,建议先进行商品聚类降维
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标] 1. 问题定义:[一句话描述业务问题及目标]
2. 事务构建建议: 2. 事务构建建议:
- 保留字段:[字段列表及处理方式和理由] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
高频项集:
强关联规则:
4. 模型建议:
参数配置:
\`min_support=0.05\`(筛选高频商品组合)
\`min_confidence=0.6\`(保证规则可信度)
业务验证方式:
推荐验证方法:人工审核规则合理性(如"是否符合业务常识")
关键评估指标:lift值、置信度、支持度 `
...@@ -15,136 +15,22 @@ export const prompt = `任务目标 ...@@ -15,136 +15,22 @@ export const prompt = `任务目标
- 业务价值目标(如"通过分群优化营销策略") - 业务价值目标(如"通过分群优化营销策略")
2. 特征工程与自变量选择 2. 模型输入设计
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 销量 | 标准化 | 核心业务指标,量纲统一需求 |
| 实际付款 | 标准化 | 反映消费能力,数值型特征 |
| 品类 | One-Hot编码 | 类别型特征需转化为数值型 |
排除字段:
| 字段名 | 排除原因 |
| 订单ID | 无业务意义,唯一标识符 |
| 省份 | 分类层级过高(与城市字段冗余) |
(2) 特征处理建议:
标准化要求:
- 强制标准化:层次聚类对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除](如"年龄字段缺失率<5%,用均值填充")
降维建议:
- 是否需要 PCA?[是/否及理由](如"特征维度>20时降低计算复杂度")
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X): 自变量(X):
字段列表及预处理方法: 字段列表
[销量]:标准化 → 均值0,方差1
[实际付款]:标准化 → 均值0,方差1
[品类]:One-Hot编码 → 扩展为N个二元变量
距离度量: 距离度量:
推荐方法:[欧氏距离/余弦相似度](如"数值型特征适合欧氏距离") 推荐方法:[欧氏距离/余弦相似度](如"数值型特征适合欧氏距离")
4. 输出格式要求
4. 算法实现建议
模型适配性:
是否适合层次聚类?[是/否及理由]
若否,推荐调整:
尝试 K-Means(如"数据规模过大时更高效")
关键参数建议:
链接方法:[ward/complete/average](如"ward方法对球形簇效果最佳")
距离度量:[欧氏距离/余弦相似度]
聚类数量:[建议值及理由](如"通过 dendrogram 确定 elbow 点")
计算资源建议:
数据量>1e4时,建议使用近似算法(如"凝聚聚类替代层次聚类")
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
2. 特征选择: 2. 特征选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
对聚类影响最大的特征:
\`实际付款\`(贡献度:32%)
特征冗余性分析:
\`销量\` & \`销售额\`(VIF=8.5,需删除其一)
4. 模型建议:
算法参数:
链接方法:\`ward\`(最小化簇内方差)
距离度量:\`欧氏距离\`(数值型特征适用)
聚类数量:
建议3-5类(通过 dendrogram 的 elbow 点判断)
可视化建议:
绘制 dendrogram 分析层次结构
使用 t-SNE/PCA 降维后观察聚类分布
5. 有效性验证
推荐验证方式:
内部指标:轮廓系数(Silhouette Score)
业务验证:
检查簇内用户特征一致性(如高付款簇的品类偏好)
对比 K-Means 聚类结果 `
...@@ -24,17 +24,9 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议 ...@@ -24,17 +24,9 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议
字段名:[字段名] 字段名:[字段名]
- 处理方式:[标准化为datetime格式、设置频率(如'D'表示日)]
目标列: 目标列:
字段名:[字段名](如\`实际付款\`、\`销量\`) 字段名:[字段名](如'实际付款'、'销量')
- 选择理由:
- 业务目标直接关联(如"预测销售额以优化库存")
- 数据需满足时间序列连续性(无缺失或稀疏时间段)
预测步长: 预测步长:
...@@ -44,22 +36,6 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议 ...@@ -44,22 +36,6 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议
(2) 数据预处理建议:
平稳性处理:
- 是否需要差分?[是/否及理由](如"存在明显趋势需一阶差分")
- 是否需要Box-Cox变换?[是/否及理由](如"数据呈指数增长")
缺失值处理:
- 策略:[插值/删除](如"用线性插值填充缺失日期")
季节性周期检测:
- 推荐周期:[N个月/周](如"发现12个月的年季节性")
3. 模型输入设计 3. 模型输入设计
数据格式要求: 数据格式要求:
...@@ -69,82 +45,17 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议 ...@@ -69,82 +45,17 @@ Holt-Winters算法设计需求说明,结构化分析和建模建议
2023-11-02 | 514.28 2023-11-02 | 514.28
参数配置建议:
\`seasonal='add'/'mul'\`:[建议类型及理由](如"乘法季节性适合销售额")
\`period=12\`:[周期值及检测依据]
4. 算法实现建议 4. 输出格式要求
模型适配性:
是否适合Holt-Winters?[是/否及理由]
若否,推荐调整:
尝试ARIMA(如"存在复杂趋势和噪声")
或 Prophet(如"需加入外生变量")
关键参数建议:
\`smoothing_level (α)\`:[建议值及理由](如"0.3捕捉趋势变化")
\`smoothing_trend (β)\`:[建议值及理由](如"0.1平滑趋势波动")
\`smoothing_seasonal (γ)\`:[建议值及理由](如"0.4捕捉季节性")
验证与评估:
推荐验证方法:滚动窗口验证(如"每30天滚动预测未来7天")
关键指标:MAE、RMSE、MAPE
计算资源建议:
数据量>1e4时,建议使用\`statsmodels\`的\`ExponentialSmoothing\`实现
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标] 1. 问题定义:[一句话描述业务问题及目标]
2. 时间序列配置: 2. 时间序列配置:
时间列:\`交易成功时间\`(已转换为\`datetime\`格式,频率为日) 时间列:'交易成功时间'(已转换为'datetime'格式,频率为日)
目标列:\`实际付款\`(连续型数值,需进行Box-Cox变换以稳定方差)
预测步长:30步(预测未来30天)
3. 关键特征分析:
季节性周期检测:
周期:12个月(ACF图显示显著峰值)
趋势稳定性:
需一阶差分(ADF检验p<0.05,原序列非平稳)
4. 模型建议:
参数配置:
\`seasonal='mul'\`(乘法季节性适合销售额增长趋势)
\`period=12\`(年季节性周期)
\`α=0.3, β=0.1, γ=0.4\`(通过网格搜索优化)
验证方式:
滚动窗口验证:最后1年数据作为测试集,每30天滚动预测
关键指标:MAPE<15%(业务可接受误差范围)
数据预处理**: 目标列:'实际付款'(连续型数值,需进行Box-Cox变换以稳定方差)
- 执行Box-Cox变换(λ=0.5)以消除异方差性 ` 预测步长:30步(预测未来30天) `
...@@ -15,138 +15,24 @@ K-Means算法设计需求说明,结构化分析和建模建议 ...@@ -15,138 +15,24 @@ K-Means算法设计需求说明,结构化分析和建模建议
- 业务价值目标(如"通过分群优化营销策略") - 业务价值目标(如"通过分群优化营销策略")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 销量 | 标准化 | 核心业务指标,量纲统一需求 |
| 实际付款 | 标准化 | 消费能力关键指标 |
| 客户年龄 | 标准化 | 与购买行为相关(如年龄分层) |
| 品类 | One-Hot编码 | 类别型特征需转化为数值型 |
排除字段:
| 字段名 | 排除原因 |
| 订单编号 | 无业务意义,唯一标识符 |
| 交易时间 | 非数值型且无直接业务解释性 |
| 物流信息 | 与客户/商品特征无关 |
(2) 特征处理建议: 2. 模型输入设计
标准化要求:
- 强制标准化:K-Means对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除](如"年龄字段缺失率<5%,用均值填充")
降维建议:
- 是否需要 PCA?[是/否及理由](如"特征维度>20时降低计算复杂度")
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X): 自变量(X):
字段列表及预处理方法: 字段列表
[销量]:标准化 → 均值0,方差1
[实际付款]:标准化 → 均值0,方差1
[品类]:One-Hot编码 → 扩展为N个二元变量
距离度量: 距离度量:
推荐方法:欧氏距离(K-Means默认) 推荐方法:欧氏距离(K-Means默认)
3. 输出格式要求
4. 算法实现建议
模型适配性:
是否适合K-Means?[是/否及理由]
若否,推荐调整:
尝试层次聚类(如"需要层次结构解释")或DBSCAN(如"存在噪声数据")
关键参数建议:
簇数(n_clusters):[建议值及理由](如"通过肘部法则确定为3类")
初始化方法:[k-means++/随机](推荐k-means++以提高收敛稳定性)
max_iter:[建议值及理由](如"设置为300次迭代以确保收敛")
计算资源建议:
数据量>1e4时,建议使用Mini-Batch K-Means加速
有效性验证:
推荐指标:轮廓系数、Calinski-Harabasz指数
业务验证:检查簇内特征一致性(如高付款簇的品类偏好)
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
2. 特征选择: 2. 特征选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
对聚类影响最大的特征:
\`实际付款\`(贡献度:32%)
特征冗余性分析:
\`销量\` & \`销售额\`(VIF=8.5,需删除其一)
4. 模型建议:
簇数建议:
推荐3类(肘部法则显示WCSS在k=3时显著下降)
参数配置:
\`init='k-means++'\`(避免随机初始化陷阱)
\`max_iter=300\`(平衡计算效率与收敛性)
有效性验证:
内部指标:轮廓系数(目标>0.7)
业务验证:
检查簇内客户特征一致性(如高付款簇的品类偏好)
对比层次聚类结果 `
...@@ -11,64 +11,16 @@ export const prompt = `任务目标 ...@@ -11,64 +11,16 @@ export const prompt = `任务目标
核心问题 :该数据集拟解决的业务问题是什么?(例如预测销售额、分析用户行为影响因素等) 核心问题 :该数据集拟解决的业务问题是什么?(例如预测销售额、分析用户行为影响因素等)
2. 2.
因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。 因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。
3. 2. 模型输入设计
模型预期 :预期模型应达到的性能指标(如R²、RMSE等),或业务价值目标(如提升预测准确率10%)。
2. 特征工程与自变量选择
请分步骤给出建议:
(1)特征筛选标准
从数据集中选择适合作为自变量(X)的特征,需满足以下条件:
相关性 :与因变量有显著统计学关联(如皮尔逊相关系数>0.3或p值<0.05);
可解释性 :符合业务逻辑(例如广告投入与销售额应正相关);
数据质量 :无严重缺失值(缺失率<5%)且分布合理(无极端异常值)。
(2)特征处理建议
数值型特征 :是否需要标准化/归一化?(如线性回归对特征量纲敏感)
分类特征 :是否需要独热编码或嵌入处理?(如性别、地区等字段)
交互特征 :是否存在需要组合的特征?(例如广告投入×用户年龄的交互项)
(3)排除特征
列出应排除的特征并说明原因(如多重共线性、冗余字段、无关变量)。
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X) :具体字段名称及预处理方法; 自变量(X) :具体字段名称
因变量(Y) :字段名称及是否需要转换(如对数变换)。 因变量(Y) :字段名称
4. 算法实现建议 3. 输出格式要求
1.
模型适配性 :
线性回归是否适合该数据集?若否,是否需要调整(如添加正则化项变为岭回归/lasso)?
若数据存在非线性关系,是否需要先尝试多项式回归?
1.
计算资源建议 :
特征维度是否需要降维(如PCA)以减少模型计算复杂度?
1.
评估与验证 :
推荐的交叉验证策略(如K折交叉验证);
需要监控的评估指标(如R²、调整R²、F统计量)。
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
...@@ -77,18 +29,4 @@ export const prompt = `任务目标 ...@@ -77,18 +29,4 @@ export const prompt = `任务目标
3. 自变量选择: 3. 自变量选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称] `
...@@ -4,7 +4,7 @@ export const prompt = `任务目标 ...@@ -4,7 +4,7 @@ export const prompt = `任务目标
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)] 数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
输出要求 输出要求
请以以下结构分点输出,确保结论清晰、逻辑严谨: 请以以下结构分点输出,确保结论清晰、逻辑严谨:
...@@ -25,55 +25,14 @@ export const prompt = `任务目标 ...@@ -25,55 +25,14 @@ export const prompt = `任务目标
[业务意义说明,如"该字段直接反映购买行为"] [业务意义说明,如"该字段直接反映购买行为"]
[数据分布说明,如"二分类/多分类分布均衡"] [数据分布说明,如"二分类/多分类分布均衡"]
3. 自变量选择 3. 模型输入设计
请给出最终的模型输入方案 :
保留字段 :
字段名 | 处理方式 | 理由
[字段1] | [标准化/One-Hot等] | [业务相关性/数据质量]
[字段2 | ... | ...
排除字段 :
字段名 | 排除原因
[字段X] | [冗余/强共线性/数据缺失率>30%等]
4. 关键特征分析
相关性最高特征 :
[字段名](与因变量相关系数:[数值],如|r|=0.78)
高共线性特征对 :
[字段A & 字段B](VIF值:[数值],如VIF=8.5,需处理)
5. 模型建议
是否需要正则化 : 自变量(X) :具体字段名称
[是/否]
理由 :
[如"存在多重共线性(VIF>5),推荐L2正则化"]
[或"特征稀疏且无冗余,无需正则化"]
推荐验证方式 : 因变量(Y) :字段名称
4. 输出格式要求
[方法名称,如"分层5折交叉验证"]
理由 :
[如"数据量较小且类别分布不均衡"]
6. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
...@@ -82,18 +41,4 @@ export const prompt = `任务目标 ...@@ -82,18 +41,4 @@ export const prompt = `任务目标
3. 自变量选择: 3. 自变量选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表及处理方式] `
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称] `
...@@ -8,109 +8,19 @@ export const prompt = `任务目标 ...@@ -8,109 +8,19 @@ export const prompt = `任务目标
请明确回答以下问题: 请明确回答以下问题:
1. 1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等) 核心问题 :该数据集拟解决的业务问题是什么?(例如预测销售额、分析用户行为影响因素等)
2. 2.
因变量(目标)选择 : 因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。
字段名:[目标变量字段名] 2. 模型输入设计
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 标准化/One-Hot | 与因变量相关性显著(如|r|=0.5+)、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议:
标准化要求:
- 强制标准化:SVM对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X):
自变量(X) :具体字段名称
字段列表及预处理方法:
因变量(Y) :字段名称
[字段A]:标准化 → 均值0,方差1
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议 3. 输出格式要求
模型适配性:
是否适合SVM?[是/否及理由]
若否,推荐调整:
尝试线性SVM(如"高维稀疏数据")或核技巧(如"非线性边界问题用RBF核")
关键参数建议:
\`C\`:[建议值及理由](如"设置为1.0平衡分类边界与误分类惩罚")
\`kernel\`:[linear/rbf/poly等](如"非线性问题推荐RBF核")
\`gamma\`:[建议值或'auto'](如"RBF核时设为'auto'或网格搜索优化")
计算资源建议:
是否需要降维?[是/否及方法](如"特征维度>1e3时用PCA降维")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、AUC-ROC(二分类时)]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
...@@ -119,20 +29,4 @@ export const prompt = `任务目标 ...@@ -119,20 +29,4 @@ export const prompt = `任务目标
3. 自变量选择: 3. 自变量选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表] `
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
...@@ -10,103 +10,19 @@ export const prompt = `任务目标 ...@@ -10,103 +10,19 @@ export const prompt = `任务目标
1. 1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等) 核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等)
2. 2.
因变量(目标)选择 : 因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。
字段名:[目标变量字段名]
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 与因变量信息增益高、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议: 2. 模型输入设计
分类特征:
- 编码方式:[标签编码/One-Hot](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 : 请给出最终的模型输入方案 :
自变量(X):
自变量(X) :具体字段名称
字段列表及预处理方法:
因变量(Y) :字段名称
[字段A]:标签编码 → 转换为整数类型
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议 3. 输出格式要求
模型适配性:
是否适合决策树?[是/否及理由]
若否,推荐调整:
尝试随机森林/梯度提升树(如"特征间交互复杂,需集成学习")
关键参数建议:
\`max_depth\`:[建议值及理由](如"防止过拟合,设置为5")
\`min_samples_split\`:[建议值及理由](如"避免过分割,设置为10")
\`class_weight\`:[平衡/不均衡](如"类别分布不均衡时设置'balanced'")
计算资源建议:
是否需要特征选择?[是/否及方法](如"使用特征重要性筛选Top 10字段")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、特征重要性图表]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论: 请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述] 1. 问题定义:[一句话描述]
...@@ -115,20 +31,4 @@ export const prompt = `任务目标 ...@@ -115,20 +31,4 @@ export const prompt = `任务目标
3. 自变量选择: 3. 自变量选择:
- 保留字段:[字段列表及处理方式] - 保留字段:[字段列表及处理方式] `
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
import ReactECharts from 'echarts-for-react'
import { useDataFieldQuery, useDataQuery } from '@/hooks/useQuery'
interface DataItem {
[key: string]: any
customer_gender: string
brand: string
sales_volume: number
unit_price: number
}
interface ProcessedDataItem {
gender: string
[key: `${string}-${string}`]: number
}
export default function Chart() {
const { getFieldName } = useDataFieldQuery()
const {
data: { list = [] },
} = useDataQuery()
const xField = 'customer_gender'
const yField = ['sales_volume', 'unit_price']
const labelField = 'brand'
// Get unique genders for x-axis
const genders = Array.from(new Set(list.map((item: DataItem) => item[xField]))) as string[]
// Get unique brands for series
const brands = Array.from(new Set(list.map((item: DataItem) => item[labelField])))
// Prepare data structure
const processedData: ProcessedDataItem[] = genders.map((gender) => {
const genderData: { [key: `${string}-${string}`]: number } = {}
brands.forEach((brand) => {
const item = list.find((item: DataItem) => item[xField] === gender && item[labelField] === brand)
if (item) {
yField.forEach((field) => {
genderData[`${brand}-${field}`] = item[field]
})
}
})
return {
gender,
...genderData,
}
})
const option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
legend: {
show: true,
data: yField.map((field) => getFieldName(field)),
},
xAxis: {
type: 'category',
data: genders,
axisLabel: {
interval: 0,
},
},
yAxis: [
{
type: 'value',
name: '销量',
position: 'left',
},
{
type: 'value',
name: '单价',
position: 'right',
},
],
series: brands.flatMap((brand) => [
{
name: `sales_volume`,
type: 'bar',
yAxisIndex: 0,
data: processedData.map((item) => item[`${brand}-sales_volume`] || 0),
label: {
show: true,
position: 'top',
},
},
{
name: `unit_price`,
type: 'bar',
yAxisIndex: 1,
data: processedData.map((item) => item[`${brand}-unit_price`] || 0),
label: {
show: true,
position: 'top',
},
},
]),
}
return <ReactECharts option={option} style={{ height: '100%' }} />
}
...@@ -10,4 +10,8 @@ export const routes: RouteObject[] = [ ...@@ -10,4 +10,8 @@ export const routes: RouteObject[] = [
path: '/demo/button', path: '/demo/button',
Component: lazy(() => import('./button')), Component: lazy(() => import('./button')),
}, },
{
path: '/demo/chart',
Component: lazy(() => import('./chart')),
},
] ]
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论