云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

对象存储_爱宠大机密百度云_高性价比

小七 141 0

基于贝叶斯推理的近实时硬件故障率估计

在数据库里试试这个笔记本你可能在不知情的情况下,在数据科学中使用贝叶斯技术!如果你没有,那么它可以增强你的分析能力。本博客跟随数据科学中心(datasciencecentral)上的贝叶斯推理(Bayesian reasoning)介绍,并将展示这些想法如何改进现实世界的用例:从流式传感器数据源估计硬盘故障率。当你了解到这些技巧能为你做些什么时,请继续阅读!使用案例:硬盘故障您可以从数据中心的硬盘进行遥测,包括驱动器型号和故障。您想了解哪些驱动器的故障率异常高。Backblaze的善良人士提供的正是这些数据,这些数据来自运营数年的数据中心。数据是按单个驱动器和按天细分的,并且有来自智能传感器读数的丰富信息,但是我们只使用驱动器模型以及它是否在某一天发生故障。以2018年第二季度和第三季度数据为例,下载CSV文件的归档文件并解包到共享位置。如上所述,最直接的方法是通过模型找到故障率,并将其作为实际故障率的最佳估计。按故障率划分的前6个驱动器(注:为了可读性,此处将故障率按每年的故障率计算)如下:从pyspark.sql.functions进口*数据路径=。。。聚合密度=火花。阅读.\选项("标题",真)\选项("inferSchema",True)\csv(数据路径+"/current/")\选择("型号"、"故障")\groupBy("模型")\agg({"*":"count","failure":"avg"})\过滤器("平均(故障)>0")\orderBy(desc("平均(失败)"))\限制(6)\缓存()显示(agg_df.WITH列("pct_故障",col("平均(故障)")*100.0)(在Databricks中,只需使用单元格输出中的plot选项从这些结果的表视图切换到上面的柱状图。)ST8000DM004看起来每年的故障率高达0.5%,但是,我们有多确定它不仅在第二季度和第三季度经历了一系列不幸的高故障?假设真实故障率λ恒定,则每次的故障次数服从泊松分布,即泊松(λ),正如上面的人头数服从二项分布一样。同样如上所述,我们希望了解失效率λ的分布。它遵循参数α和β的伽马分布。作为beta分布,他们有方便的解释。在t天内出现f失效后,λ的分布为Gamma(f,t)。将numpy作为np导入进口scipy.stats公司作为统计数据从pyspark.sql.types进口*to_gamma_schema=ArrayType(StructType([StructField("rates",DoubleType()),StructField("pdfs",DoubleType()))def build_gamma_udf(df,max_scale_factor=1):最大平均故障=数据框选择(max("avg(failure)").collect()[0][0]#计算每个模型的速率参数点处的伽马分布PDFdef to_gamma_pdf(计数,平均值):#k=α=故障次数k=计数*平均值#θ=1/β,其中β=总观测值θ=1.0/计数#选择速率,尝试以较小的速率使用更多的样本费率=地理空间(最大平均故障/1000,最大平均故障*最大刻度因数,100)#计算这些点的概率分布函数PDF=stats.gamma.pdf(速率,a=k,标度=θ)返回列表(zip(收费表(), pdfs.收费清单()))返回udf(到_gamma_pdf,to_gamma_schema)to_gamma_pdf_udf=生成_gamma_udf(agg_df)gamma_df=聚集df\"U列失败率(pdf)""U(U)""失败率"\选择("型号",列("费率_PDF.费率")。别名("rate"),col("rates")_PDF.PDF").alias("pdf")显示(伽马射线_df.WITH列("百分比率",col("rate")*100.0)注意不同模型的估计失效率的分布是多么的不同。ST8000DM004具有非常广泛的分布,无可否认,较高的故障率;在这里,它的可读性被切断了,但是它的大部分分布每年超过0.4%(再次注意,为了可读性,图中是年化故障率)。这是因为我们对这个模型的观察相对较少:放大左边的"ST500LM012 HN"和"WDC WD5000LPVX"的两个峰值分布:有趣的是,WDC最有可能的年化故障率低于ST500,约为0.015%对0.02%。然而,我们对WDC的观测较少,而且分布更广。如果问题是,哪个驱动器的故障率高于0.03%,那么根据这些信息,应该是WDC。例如,如果决定哪些驱动器最有可能超出制造商的公差,那么这实际上可能是相关的。分配很重要!不仅仅是地图估计。使用优先级分析流中的失败事实上,这些数据并不是一次到位的。它到达一个流中,因此连续运行这类查询是很自然的。这对于apachespark的结构化流媒体来说很简单,而且处理过程几乎相同。当然,在推出流式分析的第一天,它从零开始。即使在两个季度的数据之后,由于故障很少发生,故障率仍然存在很大的不确定性。一个正在将这种离线数据科学转变为在线流媒体环境的组织可能确实拥有大量的历史数据。这只是一种关于失败率的先验信念,可以作为失败率的先验分布注入其中!gamma分布是Poisson分布的共轭分布,因此我们可以用gamma分布来表示先验值,并且可以在观测到一些数据后,不需要进行大量的数学运算就可以简单地计算出后验gamma分布。由于参数τ和β解释为失败次数和天数,因此可以在历史数据上计算这些值,然后将其添加到由结构化流作业连续计算和更新的参数中。注意:优先权=火花。阅读.\选项("标题",真)\选项("inferSchema",True)\csv(数据路径+"/historical/")\选择("型号"、"故障")\groupBy("模型")\agg({"*":"count","failure":"avg"})\带列("alpha",col("count(1)")*col("avg(failure)"))\带列("beta",col("count(1)"))\选择("model"、"alpha"、"beta")\缓存()聚合流=spark.readStream.\架构(原始_数据框模式).\选项("标题",真)\选项("maxFilesPerTrigger",1)\csv(数据路径+"/current/")\选择("型号"、"故障")\groupBy("模型")\agg({"*":"count","failure":"avg"})\过滤器("平均(故障)>0")\orderBy(desc("平均(失败)"))\限制(6)max_avg_failure=优先_数据框选择(平均值(col("alpha")/col("beta")).alias("失败率")).agg(max("失败率")).collect()[0][0]def to_gamma_pdf(计数,avgf,previor_alpha,previor_beta):#注意:下面添加了优先级k=先前α+计数*平均值θ=1.0/(前β+计数)费率=地理空间(最大平均故障/1000,最大平均故障,100)PDF=stats.gamma.pdf(速率,a=k,标度=θ)返回列表(zip(收费表(), pdfs.收费清单()))to_gamma_pdf_udf=udf(to_gamma_pdf,to_gamma_schema)γ流=聚集流\join(priors_df,"model",how='left')\fillna(0,子集=alpha","beta"])\With列("gamma",to_gamma_pdf_udf("计数(1)","平均值(失败)","α","β"))\选择("model",explode("gamma").alias("rates_pdfs"))\选择("型号",列("费率_PDF.费率")。别名("rate"),col("rates")_PDF.PDF").alias("pdf")历史数据从每个模型的伽马分布的先验数据中得到了τ和β,这很容易与对数据流的相同分析相结合(这里,根据我们上面分析的数据模拟为"流")。当运行时,这将生成故障率最高的模型的故障率分布的更新图。它可以很容易地根据这些发行版的其他功能生成警报或其他警报,其代码实际上与生成简单脱机分析的代码相同。结论当你符合一个分布时,会发生比你想象的更多的事情。你可能在没有意识到的情况下使用了"频率专家"或"贝叶斯"推理。贝叶斯观点有其优点,因为它为答案的先验知识提供了一个位置,并且产生了一个答案的分布,而不是一个估计值。通过Spark的结构化流和对前后分布的理解,这种观点可以很容易地在实际应用中发挥作用。免费试用Databricks。今天就开始吧