咨询公司方法论 | 如何在提问时避免「XY问题」

image
我在使用R语言的pdftools时,报错不能识别中文字体,如何解决?

这个问题非常专业,既涉及到R语言编程,还涉及到PDF文档的处理,还有令人头大的中文编码问题。

也许提问者会得到非常详尽的技术指导,花上六个小时解决这一问题。但是他最初是想做什么?

原来他只是有几份PDF要拼接到一起,是一个一次性的任务。但他第一反应就是去写程序解决这个问题。

所以,提问时不能只描述「我在做什么的过程中遇到了什么问题」,而要把问题的背景描述清楚。

如果这么问,只要五分钟就能解决问题:

我有几份PDF要拼接到一起,目前试图用R语言编程拼接,但是pdftools报了中文字体无法识别的错误。

回答者就会意识到,提问者并不是R-specific的,他的目的是拼接PDF。于是回答者就会说:

你可以去smallpdf.com在线处理自己的PDF文档,不一定要用R。

回答者视角

在我司,数据科学家/数据分析师除了团队内部的项目,还有一部分工作是帮助商业分析师处理数据,比较像「回答者」。

回答者作为提供技术帮助的人,会提供详细的技术解答,或者快速响应商业分析师的需求。快速响应不是坏事,但是不清不楚地快速响应,往往会导致「不知道自己在做什么」,甚至忽视了问题中的坑,导致工作返工。

这个时候就要搞清项目背景,而不要急匆匆地开始工作。也就是说,即便提问者提出来一个不好的Y问题,作为回答者也需要主动去多问一句,你想做的X是什么?

例如,去年刚入职的时候,我收到一位商业分析师的需求(有改动):

我有一组数据,需要你按照A、B列分组,统计C列的加总,再按照A、B、C倒序排列,每组取C列出现的第一个B值。如果同一个A、B组里有两个相同的C值,那么随意取一个B。

商业分析师可能是怕给我增加工作量,所以把处理的每一步都详细地写了出来,只要我用代码实现即可。但是这个需求是什么意思?如果直接照做,可能落入提问者都没发现的数据陷阱中。

于是需要问,做这个的目的是什么?这个数据是什么意思?

原来是这样的:

这是一份用户年度消费去向的数据,A列是用户的ID,B列是消费类目(食物、影音娱乐、旅行、电子产品等),C列是消费的数值。商业分析师其实是想找到这一年中,每个用户最大的消费类目是哪个。

于是,你可以找到非常方便的方法处理,而不需要接受提问者的「技术指导」。例如,一份R的代码如下:

income_source_stat = income_source[, .(channel_sum = sum(C)), .(A, B)] %>% setorder(A, B, -channel_sum) income_source_stat[, rank:=rowid(A)] income_source_top = income_source_stat[rank==1]

此外,你还可以发现数据的异常值,例如有些消费金额是负数,有些是NA,这些显然不能直接加总处理,需要和提问者探讨,看看如何处理。也许是这份数据本身就出了问题,需要从源头上更换——也许这样就避免了一次无谓的返工。

小结

最后再重复一句,在工作中,不论是「提问者」还是「回答者」都需要确认问题的最初目的,不要沉迷于一个特定的方案细节而忽视了整体背景。

参考链接