前言
让我们以一个小练习开始本文。请拿出笔和纸,一有答案就写下来。不要反复思考,应该在15秒内完成。
请在纸上写下对于“一个成功的数据科学家需要哪些技能?”的问题的答案。
很多读者可能已经写过代码,有着关于分析工具、统计学等等的知识。要成为一个成功的数据科学家,这些当然是必须的,但还远远不够。
区分一名分析学家/数据科学家好坏与否的最重要的技能之一是:面对复杂问题,确定分析框架,简化假设,分析问题,然后找到解决方案。至于那些分析工具只是用来解决问题的手段和方法而已。
在本文中,我们将通过一个案例分析来学习系统化解决问题的方法和步骤。
你会学到什么呢?
在这里你会发现用实际问题来训练你的大脑在解决复杂问题的过程中以分析的方法进行思考。这个大脑训练不仅可以把解决问题的新方法介绍给你,还会使你在跟数字打交道时反应更快。
我以前的一篇文章“how to train your mind for analytical thinking?”应该会给你一个良好的开端。(文章地址:http://www.analyticsvidhya.com/blog/2014/01/train-mind-analytical-thinking/)
实际问题
这是我每天的作息表:
每个工作日,我上午10:30准时出门上班。有时考虑到我当天要完成的工作量,我会开快些以便尽量早到(当然是在保证安全的前提下)。
然而,在过去的5天内,我发现无论在每个红绿灯之间的平均速度如何,我几乎都是在同一时间到达办公室。这让我感到有些好奇,每天上班路程上所要花费的时间是否取决于我的车速?换句话说,总平均速度都会被红绿灯调整到同一水平,而不取决于我们开车的速度。
为了解释地更清楚,请思考一个简化后的场景:
两辆汽车同时从A点,即第一个红绿灯出发。B点是另一处信号灯(,等待时间为60秒,通行时间20秒。A和B之间的距离为600米。第一辆车的启动速度为6米/秒,第二辆车的启动速度为5米/秒。哪一辆车会先通过红绿灯(B点)呢?下面是一些假设:
1. 红绿灯是根据汽车的平均速度来设置的,它会在第一个红绿灯变绿之后120秒(600米/(5米/秒))变绿。
2. 绿灯会持续20秒,红灯持续60秒(20*3)
假设两辆车都是从0秒出发。
车1到达B点所需的时间 = 600/6 = 100秒
车2到达B点所需的时间 = 600/5 = 120秒
B点为绿灯的时间区间为:(40,60);(120,140); (200,220); (280,300)
因此,汽车在61秒或者140 秒时到达B点并不影响通过第二个红绿灯的时间。让我们来计算在不影响汽车通过第二个红绿灯的情况下的最小速度和最大速度。
最小速度 = 600米 / 120秒 = 5米/秒 = 18 公里/小时
最大速度 = 600米 / 61秒 = 9.8 米/秒 = 35 公里/小时
不管你的速度是18公里/小时还是35公里/小时,你都会在同一时间通过B点。通常来说,在交通高峰期,驾驶的速度不可能在这么大的范围内变化,因此现在我的猜测看上去是有道理的。我可能无法控制从家到办公室所需要的时间(当然,这是把问题简化了很多之后的情况)。
让我们把问题复杂化一点!
现在我们有四个红绿灯 A,B,C和D。同样的,两车从A开始 0秒出发,A到B、B到C和C到D的距离相等。那么问题变成,哪辆车先通过红绿灯D。
不需要用到数学知识,就能得到答案。如果两车在同一时间通过B,由于A到B与B到C及C到D距离是一样的。因此两车会同时通过D。这个场景事实上更极端,如果一辆车以平均时速18公里行驶,另一车以平均时速35公里行驶,他们还是会同时通过D。这进一步验证了我前面的假设。
这个问题归结为:
“在我开车去上班的时候,我是不是只是一个受交通规则控制的无助的木偶?”
让我们试试把它归结为一个参数方程
在本文中难以全面分析实际情况,因此我们在一些假设上进行分析:
1 红绿灯显示为绿灯的时间为 t 秒, 之后显示为红灯时间为3t秒;
2 在路上汽车的平均速度为 v米每秒;
3 开快车的速度是汽车平均速度的x倍;
4 道路长度为L米(两个红绿灯之间距离为L米)。
到目前为止,我们已经明白,就算我们解决了处于一对红绿灯或更多对红绿灯之间的问题也不重要。如果开快车的驾驶员能够在红绿灯显示绿灯期间超过以平均时速行进的汽车,那么答案就会不同,否则开快车是没有用的。
因此,要让这个结果发生所需要的时间差就是3t。下面是解决问题的最终方程式:
普通车用时L/v秒
快车用时L/vx秒
简化后
L/v –Ll/vx > 3t
已知x, v,L和t都是正数,方程式可以进一步简化:
xL- L – 3tvx > 0
x (L- 3tv)> L
你成功了!我们知道L总是正数,因此为了让上面的方程式成立,x和(L-3tv)也一定要是正数。也就是说,如果 3tv 比L 大,你就没机会打败那些红绿灯。例如,如果t= 30秒, v= 5米/秒,L 为145米,即使你的车速跟子弹一样快,你也没有机会。
让我们设定其中几个参数,然后更深入地理解一下方程:
假设L为600米,那么方程变成:
x(200 – tv) >200。
因此,这里有一些经验法则让你有可能打败那些红绿灯:
1. 尽量减小 t (红绿灯变化周期): 在红绿灯变化交替很快的快速区域,你可能打败那些红绿灯。
2. 尽量减小 v (道路上车辆的平均速度):如果车辆平均速度很慢,车速快的就能超过车速慢的。
3. 尽量加大x (车速相对于平均车速的倍数): 如果我们开得超级快,我们还是能打败红绿灯的。但是注意如果 vt大于200,你就不可能赢。
让我们试试将一些关系进行可视化。
在班加罗尔,t的平均值大约是20秒,平均车速 v 为 5米/秒。那么方程式就是:
x (L – 300) >L
从上图中可以看出,只有当 x 和L大到可以落在阴影范围内时,我们才有可能击败红绿灯。
让我们来总结一下我们的发现:
1 如果某段路的长度比三倍的绿灯时间和平均车速的乘积小,那么你开多快都没用。
2 如果下列条件合适,我们才可能打败红绿灯:
a x值大。 我们开得飞快(不安全的选择)
b L值大。比如在高速路上开快车是有道理的。
c t值小:在红灯显示周期很长的路段开快车没有意义。
d v值小:如果在路上的平均车速真的很慢,我们还是可以打败红绿灯。我们已经知道了!
结语:
我希望你可以很享受解决这个交通问题,当然你的思维受到了挑战,这也是本文最初的目标,对吧?
本文中,通过红绿灯的例子和应用一些基本物理学概念,我解释了一些必要的技能,这些技能是成为一个数据科学家不可动摇的基础。
你是否欣赏这篇文章呢?你以前有没有思考过这一类问题呢?你觉得你能不能进一步完善优化这些计算方法来让它们更有具现实意义呢?
敬请在评论区留下您宝贵的建议和意见,谢谢!
原文发布时间为:2015-07-27