最近一直在研究chatgpt在数据分析领用的实际使用,有几个比较具体的实际案例是我在处理工作中遇到的,给大家分享一下。
一个是在商业领域,经常性的需要写日报周报月报,但到了3月底 还需要一个季度报,而季度报的数据处理是比较多的,因此,我用chatgpt 帮我写了很多个脚本。
可以看到的是它理解错了
虽然是很基础的数据合并脚本,但是它能在30秒内给我正确的答案,如果是我自己写,或许需要3-5分钟。
然后我让它帮忙写一个随机森林算法,用于用户分析,并做roc,auc和混淆矩阵的分析。
# 读取用户数据集
df = pd.read_csv('user_data.csv')# 将数据集中的标签(是否复购)转换为二元分类
df['repurchase'] = np.where(df['repurchase'] == 1, 1, 0)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('repurchase', axis=1), df['repurchase'], test_size=0.2, random_state=42)# 构建随机森林模型
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)# 使用测试集评估模型性能
y_pred = clf.predict(X_test)
y_proba = clf.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_proba)
auc = roc_auc_score(y_test, y_proba)
confusion_mat = confusion_matrix(y_test, y_pred)# 可视化 ROC 曲线
plt.plot(fpr, tpr, label='ROC curve (area = {:.2f})'.format(auc))
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()# 可视化混淆矩阵
plt.matshow(confusion_mat, cmap='Blues')
plt.colorbar()
plt.xlabel('Predicted label')
plt.ylabel('True label')
plt.title('Confusion Matrix')
plt.show()# 输出分类性能指标
print('Accuracy:', (confusion_mat[0, 0] + confusion_mat[1, 1]) / np.sum(confusion_mat))
print('Precision:', confusion_mat[1, 1] / (confusion_mat[1, 1] + confusion_mat[0, 1]))
print('Recall:', confusion_mat[1, 1] / (confusion_mat[1, 1] + confusion_mat[1, 0]))
print('AUC:', auc)
太长了 我就不截图了,这是AI给出的,基本模型是正确的,但是没有做精度检验
所以我要AI加上网格搜索调优模型,但是AI明显意会错了
# 导入所需的库
from sklearn.model_selection import GridSearchCV# 定义超参数的网格搜索范围
param_grid = {'n_estimators': [50, 100, 150],'max_features': ['auto', 'sqrt', 'log2'],'max_depth': [5, 10, 20, None],'min_samples_split': [2, 5, 10],'min_samples_leaf': [1, 2, 4],
}# 构建随机森林分类器
clf = RandomForestClassifier(random_state=42)# 定义网格搜索对象
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=5, n_jobs=-1, scoring='roc_auc')# 训练网格搜索对象
grid_search.fit(X_train, y_train)# 输出最佳参数配置和对应的 AUC 分数
print("Best parameters found: ", grid_search.best_params_)
print("Best AUC score: ", grid_search.best_score_)
这里AI很明显没有连续我们上文的结果,所以只单纯的回答了网格搜索,然后由于我很久没有做这种工作了,我忘记了其中的一个参数param_grid是做什么的,我直接就问了AI
他就直接给我输出了这么多,其实大家看到这里就已经可以知道了,后面的数据分析领域其实更多的会在理论和实践上的积累,只有当你知道了一大堆的分析方法后,你才能调动AI为你完成,因此经验+逻辑将在AI时代远大于技术能力。除非技术做到行业突破的水平。