做者|Michael Grogan 编译|VK 来源|Towards Data Sciencepython
蒙特卡洛这种方法在金融等领域获得了普遍的应用,以便对各类风险情景进行建模。web
然而,该方法在时间序列分析的其余方面也有重要的应用。在这个特定的例子中,让咱们看看蒙特卡洛方法如何被用来为web页面浏览量建模。数组
以上时间序列来源于Wikimedia Toolforge,是从2019年1月到2020年7月维基百科上“医疗”一词的网页浏览量的时间序列。数据都是按每日划分的。dom
咱们能够看到,时间序列天天都显示出显著的波动性,而且显示了数据中一些奇怪的“峰值”的典型特征。或者说,在这些天中,搜索该术语的次数特别高。机器学习
试图对这样的时间序列进行直接预测一般是徒劳的。这是由于不可能从统计学上预测搜索词什么时候会出现峰值,由于这会受到独立于过去数据的影响。例如,与健康有关的重大新闻事件会致使搜索该词的高峰。学习
然而,特别有趣的是咱们能够建立一个模拟,以分析web页面统计的许多潜在场景,并估计在不正常的场景下这个搜索词的页面浏览量有多高或多低。.net
当运行蒙特卡罗模拟时,重要的是要注意所使用的分布类型。code
考虑到页面浏览量不能为负,咱们假设分布是正偏态的。orm
如下是数据的柱状图:blog
咱们能够看到,分布显示正偏态,有几个离群值使分布尾部向右倾斜。
>>> series = value; >>> skewness = series.skew(); >>> print("Skewness:"); >>> print(round(skewness,2)); Skewness: 0.17
此分布的偏态为0.17。
QQ图代表,除了出现的异常值外,大多数值的分布都是正态分布。
然而,更可能的是,因为正偏态,该数据表示对数正态分布。咱们将数据转换为对数格式将致使分布的正态性。
>>> mu=np.mean(logvalue) >>> sigma=np.std(logvalue) >>> x = mu + sigma * np.random.lognormal(mu, sigma, 10000) >>> num_bins = 50
这是对数数据的分布,更能表明正态分布。
此外,此分布的偏态如今为-0.41。
>>> logvalue=pd.Series(logvalue) >>> logseries = logvalue; >>> skewness = logseries.skew(); >>> print("Skewness:"); >>> print(round(skewness,2)); Skewness: -0.41
这代表有轻微的负偏态,但QQ图仍显示正态分布。
既然数据已经被适当地转换,就能够生成蒙特卡罗模拟来分析页面浏览量统计的潜在结果范围。页面浏览量按照所选的分布以对数格式表示。
首先,计算时间序列的平均值和波动率(用标准差衡量)。
>>> mu=np.mean(logvalue) >>> sigma=np.std(logvalue) >>> x = mu + sigma * np.random.lognormal(mu, sigma, 10000) >>> num_bins = 50
而后用x定义相应的数组,使用mu和sigma,再生成10000个随机数,这些随机数按照定义的均值和标准差遵循对数正态分布。
array([5.21777304, 5.58552424, 5.39748092, ..., 5.27737933, 5.42742056, 5.52693816])
如今,让咱们绘制直方图。
一样,这些值以对数格式表示。咱们看到这个形状表明正态分布。如前所述,蒙特卡罗模拟的思想不是预测网页浏览量自己,而是提供在许多不一样的模拟中网页浏览量的估计值,以便肯定
在本文中,你看到了:
蒙特卡罗模拟的应用
偏态在定义分布中的做用
如何进行模拟以识别得到极值的几率
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/