如何用 ChatGPT 帮你自动分析数据?
误判
好几天之前,我就在 ChatGPT 选单里看到了 Code Interpreter。它正在灰度测试中 —— 先给一部分用户试用,如果反响不错并做了一定改进,就能推广给更多用户。
可惜当时我没能正确理解它的含义,犯了一个大错误 —— 望文生义。我以为 Code Interpreter 是指「代码解释器」,也就是给代码添加注释进行讲解的。可那不是 ChatGPT 早就有了的功能吗?干嘛还专门弄个新的模式出来呢?
后来经朋友提醒我才发现,Code Interpreter 的功能不是「解释代码」,而是执行代码。在这个模式下,你可以上传文件作为输入,让 Code Interpreter 编写代码对输入文件做处理,并且在自带的虚拟环境中执行。根据代码内容的不同,它可以利用文本、数字、图形、表格等方式给你展示结果,甚至还可以给你一个下载链接,把你指定的输出以文件形式下载回本地。
当我意识到这一点时,真可以用「惊讶」和「懊恼」来形容。我迫不及待尝试后,赶紧写作本文,告诉你这个功能。以免你跟我一样望文生义,重蹈覆辙。
下面我用一个实际的例子给你演示。
实例
首先我们需要一个演示数据集。这里我选择了一个名为 loans.csv
的贷款安全数据集。它是一张表格,属于简单结构数据,其中包含若干行,每一行代表一条贷款记录;而每列则代表某一相关属性特征,例如贷款等级,房屋拥有情况,贷款时长等信息。
最后一列 safe_loans
代表贷款成功或失败,也即这次放款是否安全。其中 -1
代表不安全。1
代表贷款安全回收。
首先我们需要将数据集上传到 Code Interpreter 中。上传按钮很不显眼,在输入框的旁边。
上传后,Code Interpreter 会自动进行分析,并为每列数据提供解释。
我点击了 "show work" 来看看究竟 Code Interpreter 是如何分析出上述结果的。
原来,Code Interpreter 直接编写了 Python 代码,读取了上传后的 loans.csv
文件,然后执行 head ()
命令,打印出来前 5 行,根据列名称和具体显示的数据综合分析信息,然后做了回答。
提示
数据已经准备好,我们现在可以开始输入提示语了。我觉得使用英文与 Code Interpreter 对话很别扭,因此我提出:
请用中文翻译上面的内容,并且对于专业术语加以简单明了的解释。谢谢
你可能会纳闷儿,老师你干嘛要这么客气呢?不就是个机器……🤫,别瞎说。礼多人不怪,AI 也一样。你跟它客气,它回答起来也会比较认真。在《人工智能这么强,我直接把工作都交给它可以吗?》一文中,我给你解释过具体的证据。
闲言少叙,这是 Code Interpreter 返回的结果。
你看,用中文回答是不是感觉好多了?对比一下你就会发现,这里的「可循环信贷利用率」等专业术语,都已有具体解释了。Code Interpreter 还在最后提出「告诉我您希望对这些数据进行哪种分析或任务」。
此时,你可以要求 Code Interpreter 做一些简单分析,并要求绘制图表(如分布图)。但对于我而言,这样的机械操作实在太无趣了 —— 每个步骤都需要我来提示,那我还要你这 AI 干啥?
计划
因此,我的下一个提示语,是这样的:
能否根据目前的数据集,思考它可以做哪些分析?请一步步思考,并且给我你有信心的答案。谢谢
注意这一段提示语中的两个技巧,你可以尝试吸收:「一步步思考」是尝试启动大语言模型的思维链;「有信心的答案」是指设定阈值,避免 ChatGPT 天马行空随意乱答。
这是 Code Interpreter 的反馈结果。
Code Interpreter 列出了可能的分析类型。
第一步是描述性分析,比如基本数量分布等。
第二步是相关性分析,总结其他变量间的相关性。
第三步是建立预测模型,其中提到了决策树,随机森林和逻辑回归等方法。也提到必须将之分为训练及测试数据集,且要「使用测试级来评估模型性能」。这种意识非常棒,已经超出了机器学习常见入门水平。
第四步就有点儿莫名奇妙了,虽然 Code Interpreter 提出使用支持向量机 (SVM)、朴素贝叶斯等几个新模型,但要做的事情和第三步是重复的。
好在,我们使用 AI 作为助手,而不是枪手。我们大可以将第四种分析类型省略,只让Code Interpreter将前三个步骤做一下。这里为了方便展示,我让 AI 一次只做一个步骤。下面是执行各个步骤的效果。
结果
第一步,描述性分析。Code Interpreter 给出了这个数据集的一些基本统计信息。包括记录数量、最常见的贷款等级、平均被雇佣不足一年人员数量、平均雇佣年限、平均债务收入、最常见贷款期限数量等。
第二步,相关性分析。Code Interpreter 识别出属于不同变量之间的正负相关关系。例如,短期雇佣与雇佣年限是相反的概念,因此 short_emp
和 emp_length_num
之间存在负相关性;债务收入比高的贷款申请者往往会使用循环信贷,因此 dti
和 revol_util
之间存在正相关性;而 safe_loans
和一些其他变量之间存在负相关性,这意味着对那些高债务收入比的人贷款,可能不太安全。
Code Interpreter还不忘提醒咱们,这些相关性不意味着因果关系,尚需要考虑更多变量的交互和非线性关系。如果是我的学生回答此题,仅仅最后这一句,就会让我非常欣慰。
第三步,构建预测模型。
Code Interpreter 中规中矩地进行了数据预处理。
我看了一下具体执行的代码:
之后是模型的训练和性能测试环节。
点开 show work
,对应的代码是这样:
之后,Code Interpreter 自动进行了结果的汇总输出与阐释。
该模型在测试数据集上的准确率为61.7%。虽然不高,但Code Interpreter指出相对于随机预测的准确率50%,还是要好一些。有意思的是,它还自动提出了如何对准确率进行提升。例如超参数优化、特征工程、使用其他模型等。特别地,Code Interpreter提出需要不仅仅关注准确率,还要考虑模型可解释性、训练和预测时间等其他指标。
非常好!不过你是说,让我自己去逐一尝试上述提升策略?那怎么可能?!Code Interpreter 既然你画了道儿,就得你来走嘛。
于是我这样提问:
你能否实施改进策略,并且在同样的测试集上进行测试?谢谢
这是 Code Interpreter 的回答。
你看?AI 开始认真干起来了不是?
这是 Code Interpreter 一通改进之后的结果:
从61.7%提升到了64.9%,准确率高吗?我觉得谈不上。但是这是一个非常有意思的开端,意味着Code Interpreter可以自动帮助我们执行提升准确率的策略,而且获得了成效。
小结
我想跟你谈谈尝试 Code Interpreter 之后的感受。我想用「惊艳」二字来形容。具体来说,就是「分析得当,执行流畅」。
咱们应该思考一下 Code Interpreter 出现的意义。曾几何时,很多小伙伴拿到宝贵的一手数据,却不知道如何分析。在几年前,你会看到很多不同学科的人一窝蜂跑去学习 Python。因为在彼时,只有学会了 Python 或者 R 后,你才可能对数据进行功能丰富且合理可行的分析。很多人因为不具备相关的技术能力,往往坐拥金山,但就是不知道怎么挖掘。
要学完 Python 或者 R 的初级操作,你至少需要学一门课程,或者啃一本教材。但是现在,你只需要和 Code Interpreter 对话,就能把这样的分析结果保质保量快速做出来,甚至比数据分析师基础入门水平都要靠谱,不亦乐乎?
ChatGPT 的 Code Interpreter,目前还在 Alpha 阶段。功能非常初级,时常遇到环境更新导致的不稳定,还有各种限制。例如说你可以让它帮你绘制统计图,英文显示都很好,但所有中文显示都是这个样子:
你当然可以让 Code Interpreter 自己去改进。但是它折腾一通,也只能给你展示这种无奈:
但是,我们有理由相信,这些问题随着技术产品的迭代改进,都会逐步解决的。
你在数据分析的过程中,使用过其他的 AI 产品吗?有什么可以推荐给大家的?欢迎留言,咱们一起交流讨论。
祝(自动)数据分析愉快!
点赞 +「在看」,转发给你身边有需要的朋友。收不到推送?那是因为你只订阅,却没有加星标。
欢迎订阅我的小报童付费专栏,每季度更新不少于10篇文章。目前价格优惠。
如果有问题咨询,或者希望加入社群和热爱钻研的小伙伴们一起讨论,订阅知识星球吧。不仅包括小报童的推送内容,还可以自由发帖与提问。之前已经积累下的帖子和问答,就有数百篇。足够你好好翻一阵子。知识星球支持72小时内无条件退款,所以你可以放心尝试。
若文中部分链接可能无法正常显示与跳转,可能是因为微信公众平台的外链限制。如需访问,请点击文末「阅读原文」链接,查看链接齐备的版本。