Chinaunix

标题: 请教一个问题,工作中遇到的,不知道应该属于算法还是数学建模 [打印本页]

作者: kkmm0105    时间: 2014-03-24 22:34
标题: 请教一个问题,工作中遇到的,不知道应该属于算法还是数学建模
请教一个问题,工作中遇到的
我想建立一个公式,对一个系统的健康状况进行打分。系统有大概200个测试点,每个测试点都有自己的风险指数,风险指数=badcase样本数/总样本数。


比如,第101个测试点中,测试的badcase有6个,总样本数为100,那么第101个测试点的风险指数为6/100=0.06。


每个测试点中,均有100个样本。大部分测试点,风险指数都很低,但不排除小部分测试点的风险指数可以达到0.9以上。


现在想建立一个算法,输入为系统所有的测试点,和各自的风险指数。输出为一个数值,代表系统的健康得分,具体要求:
1. 测试点的风险指数越高,系统的健康得分应该越低
2. 系统得分最好在0~100之前,可以精确到小数
3. 系统得分最好能和测试点的优化挂钩,比如:某次系统评分得了86.5分,如果我对某个测试点进行了优化,降低了其风险指数,那么系统得分会略有上升,比如可能到86.8分


求大家帮小弟想出这么一种算法,不要太复杂,但是要合理。提供一些思路也行


谢谢
作者: shan_ghost    时间: 2014-03-25 11:22
最糙的,风险指数全部加起来除以2,就是全局风险指数;然后用100减去全局风险指数就是健康度。完全满足你的3个要求。


但,实践上,可能不同风险指数的权值是不同的。比如如果一个测试点的风险指数是0.9,其它全是0;那么这个系统很可能会比有九个风险指数为0.1、其它全为0的更不可靠。
这种情况,可以让风险高点的风险指数远远超过1;但这样最终算出来的值会大于100.那么此时只要用对数之类算法调整一下,让它落到0~100范围即可。


另外,有些时候,风险指数0.1甚至0.8都没什么,但超过0.9就极为危险;但也有些情况,风险指数0.1就极为严重了;从0.1提高到0.9反倒没多大影响。
——如网络ping值,从1到100甚至200ms一般都没什么;但再高就严重影响网速;继续提升到1000呢,也就是慢了,没别的。
对这类情况,可利用指数/对数调整风险指数-风险曲线,使得风险指数-风险曲线接近直线。这样才能反映真实情况。


类似的,有些测试点可能比其他测试点更重要,那么它上面的风险对总值的影响就更大。这种可以用合理加权的方式解决。
作者: kkmm0105    时间: 2014-03-25 12:44
回复 2# shan_ghost



谢谢回答!
   
两个问题:

1. 最糙的,风险指数全部加起来除以2,就是全局风险指数;

这个是怎么推导出来的?

2.可利用指数/对数调整风险指数-风险曲线,使得风险指数-风险曲线接近直线。

这个可以说的具体一些么,为什么用指数/对数,可以举个例子么
作者: shan_ghost    时间: 2014-03-25 14:10
回复 3# kkmm0105


    没啥推导的。先把箭射出去再画靶子而已。

说白了,就是先按要求随便凑一个公式,然后画出这个公式的图像,看看有没有不合理的;如果不合理,就改变某些参数,以让公式的图像符合预期。


如果仅仅是要求正相关,那么最“糙”的方法已经满足要求了。但实际上一般是要求线性值,这就需要额外的一些修正。


这类问题其实没有什么现成公式/理论可以借用。自己搞明白想要什么样的效果,自己找出能达到这个效果的公式。



举例来说,随身听的音量控制旋钮见过吧。当初的设计目标就是想用可变电阻来改变输出音量;结果发现人的听感和能量之间其实是平方关系——所以用拨动距离和电阻量是线性关系的可变电位器(其实就是滑动电阻器),就导致要么拨很长距离,音量没什么变化;要么到了某个点,拨一点点声音就一下子吵的受不了。所以后来就用对数关系的电位器,听起来音量就是线性变化了。

换句话说,这里面的关键是搞明白变量取值对最终效果的影响:正比、反比、指数、对数……最后通过某种变换(如指数关系就取对数、对数关系就取指数),得到一个线性的输出值。

作者: kkmm0105    时间: 2014-03-25 14:15
回复 4# shan_ghost


    多谢!受益匪浅~
作者: cjaizss    时间: 2014-03-26 09:02
窃以为先建一个概率空间,往概率论的方向靠。
作者: kkmm0105    时间: 2014-03-26 18:25
回复 4# shan_ghost


    如果补充一个需求,比如加一个测试要点,如果风险指数高于平均水平,那么总分应该下降,否则总分上升,这样算法应该是什么样的呢
作者: shan_ghost    时间: 2014-03-26 18:52
kkmm0105 发表于 2014-03-26 18:25
回复 4# shan_ghost


之前提过思路了。最简单的,以平均值为拐点,大于平均值,则3倍(3是随意给的一个数字)其风险值;否则使用原始风险值即可。

总之,这是一个凑风险值-健康度曲线的任务。合适的曲线弄出来了,很容易找到把健康度映射到0~1之间或0~100之间或100000~1000000000000000之间的办法。
作者: finyren    时间: 2014-04-28 15:59
健康指数=危险指数的倒数, 行吗




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2