奇趣编程|统计概率中假设检验的套路

什么是假设检验?

简单点说,假设检验就是先提出某种假设,然后判断假设是否成立的过程。

下面以炒股为例。

第一步:明确问题是什么。

问题:某家公司的股票在未来走势将会如何?

答案:只有三种可能:上涨、横盘振荡、下跌。

第二步:证据是什么。

分别对上涨、横盘振荡、下跌这三种可能进行证据分析。

上涨、横盘、下跌的原因分别是什么?数据是什么?

第三步:判断标准是什么。

使用公认可行的判断标准才具有说服力,比如基于平均值、概率等来判断。

第四步:做出结论。

当数据明显高于或低于某个平均值时,就可以作出相应的判断,得到一个有证据支撑的答案。

奇趣编程|大数据可视化分析有什么用?

大数据是最近几年比较火的一个词,大数据可视化分析能力是未来工作生活的必备能力之一。

大数据可视化分析,可以把数字变成可视化图表,从而在复杂枯燥的数字里寻找出规律,辅助人工决策。

就目前来看,大数据可视化分析有什么用呢?目前用到比较多的是以下几个方面。

1.数据监测。大的对于银行、金融,小的对于工厂、商家、超市,都可以用到。比如说,某平台发放了一批优惠券、礼品券,如果没有数据监测,很有可能被个别人发现规则的漏洞,大量刷数据,造成主办方的损失。有了数据监测,就可以监测到数据异常,及时封堵漏洞,避免或减少损失。

2.数据预测。最普及的数据预测就是天气预报,现在的天气预报最长已经能提前预报未来30天的数据,并且每隔十五分钟更新一次。再如电商平台对交易量的预测,可以根据过去各年的交易历史,统计分析出规律,找出交易量高峰和低谷的原因,对未来的交易量预测有准确的数据依据。

3.数据决策。比如无人驾驶,实际上就是用各种传感器监测大量的数据,再通过电脑计算作出相应的决策。再如种植业、养殖业,如果能有一个平台统一收集、整理、分发本行业的供求数据,对各地、各品类的产品价格做出历史分析和未来价格预判,农户有了数据作为参考,在决策时就不会太盲目,市场整体供求平衡,农户的收益才会更稳定。

奇趣编程|计算机生成的随机数有规律吗?

很多朋友想知道,计算机生成的随机数有规律吗?

我们可以通过实验来看一下结果到底是有规律还是无规律。

首先说一下计算机具体是怎么生成随机数的。

计算机要生成一个随机数,需要一个随机数种子,这个随机数种子是从电脑主板定时器上的内存里的计数值。这个定时器的作用是用来计算当前系统时间,每隔一个时钟信息周期,计数值就增加1。

如果用户不指定随机数种子,在默认情况下,计算机产生随机数时,随机数种子就是内存里的计数值。

因为计算机里的随机数算法是固定的,所以只要随机数种子相同,产生的计算结果就是相同的。

这样产生了一个问题:假如张三和李四各有一台电脑,李四通过某种方法获取张三电脑的随机数种子,那李四的电脑是不是就能通过相同的随机数算法计算出与张三的电脑相同的随机数结果?

确实发生过这样的事。之前在新闻上看到过国外有人通过某种技术手段获取了某台服务器的内存计数值,造成的数据异常引起了网络管理员的注意,后来通过技术分析发现了服务器漏洞。

但本文的方向不是搞出相同的随机数结果,本文的目的是通过数据可视化的方式来观察计算机生成的随机数有没有规律。

我们用JS写一个HTML文档,源代码如下:

<html>
<head>
<title>javascript生成随机数转换为图片_计算机生成的随机数有规律吗?_奇趣编程</title>
<style>
div,span {line-height:1px;font-size:1px;}
br {clear::both}
</style>
</head>
<body style="padding:5px;line-height:10px;" onload="Draw()"></body>
<script type="text/javascript">
var C = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
function RC()
{
	var COLOR = "";
	for (var i=0;i<6;i++)
	{
		COLOR +=  C[Math.floor(Math.random()*(C.length-1))];
	}
	return COLOR;
}

function Draw()
{
	for (var j=50;j>0;j--)
	{
		for (var i=50;i>0;i--)
		{
			var pix = document.createElement('span');
			pix.style.background = "#"+RC();
			pix.style.width = "10px";
			pix.style.height = "10px";
			pix.style.float = "left";
			document.body.appendChild(pix);
		}
		var BR = document.createElement('BR');
		document.body.appendChild(BR);
	}
	setTimeout("Clear()",500)
}

function Clear()
{
	document.body.innerHTML = "";
	Draw();
}
</script>
</html>

保存在桌面,然后双击让它在浏览器里打开,可以看到生成的随机数被转换成不同颜色的小方块:

通过观察这些小方块,我们可以发现这样一个规律:

小方块数量越多,每种颜色的小方块在数量上越平均。也就是说,产生的随机数越多,每个数字出现的次数越接近平均值,即是每个数字出现的概率是一样的。

从中我们也可以总结出一个思路,当局部没有明显规律时,我们可以从整体上找规律,这也是一种提高编程能力的的思维方式。

奇趣编程|怎么生成一串真随机数字?

很多朋友习惯用自己的生日、手机号、QQ号等来做密码,这是非常不安全的。

比如说,有些人的QQ空间相册有自己的隐私照片,设置了查看密码,如果这个密码被别人随便猜解出来,极有可能会个人隐私泄露,造成不必要的麻烦。

在这个网络当中,容易就能找到一个人的生日、QQ号等公开信息,别人只需要尝试几次就能猜解出你的密码,如果你很多帐号的密码都是相同的,那别人只需要猜出了一个帐号的密码,其它帐号的密码也全部被知道了。

那用什么样的密码才能更安全呢?每个帐号都用不同的随机数。这样别人无法通过几次尝试来猜解出你的密码,即使花了很多时间精力猜出了一个帐号的密码,也无法通用到其它帐号。

所以,我们很需要生成一串随机数字的方法。

我们可以生成真随机数或伪随机数。“真随机数”,是后面的数字和前面的数字没有关系,是用物理方法来得出来的随机数。而电脑里用固定、可重复的算法算出来的随机数,是“伪随机数”。

怎么手工获取一个物理性的真随机数呢?这里我分享一个自己的方法。

拿出十个硬币,放到一个盒子中,上下左右随便摇晃,打开盒子数一下正面朝上的有多少个,记下这个数字,连续做六次,就得到了一个6位的随机数字。

比如:

第一次,3个正面朝上,记为3;

第二次,5个正面朝上,记为5;

第三次,8个正面朝上,记为8;

第四次,2个正面朝上,记为2;

第五次,4个正面朝上,记为4;

第六次,7个正面朝上,记为7;

最终得到的六位数密码就是“358247”。

此方法人人可用。

奇趣编程|随机数有什么用?

在统计学里面很多地方都要用到随机数。

应用1:随机抽样。在做样本统计分析的时候,我们需要从总体中随机抽取样本。比如说,仓库里的产品需要抽样检测质量,这里可以用电脑随机产生产品编号,将这些随机编号的产品拿出来进行质量检测。再比如,相关部门对食品安全的检测,随机从超市里抽取一种食品进行食品安全检测。随机抽样可以防止某些人找出抽样的规律作弊。

应用2:随机分配。比如超市搞活动,可以从所有的客户当中随机抽出部分客户赠送优惠券。

应用3:随机选择。比如说人工智能中的训练,围棋黑白双方随机下子,将所有的对弈记录成决策树,然后通过剪枝,保留层级多的分支,继续迭代多次训练,就能得到越来越强大的人工智能决策路径。

奇趣编程|什么是真随机数和伪随机数?

在统计学里,随机数是很常见的一个词,随机数就是一个随机的数字,它后面的数字和前面的数字没有任何关系。

真随机数就是“绝对随机”的数字,伪随机数就是“相对随机”的数字。

目前的计算机产生的随机数都是伪随机数,未来的量子计算机有可能基于自然规律产生不可重现的真随机数。