免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

【概率统计】寻找最优映射区间

本帖最后由 cheng 于 2019-5-30 00:21 编辑

我有500w全量数据样本,每个样本中都有“真实月薪”这个字段数据,我通过对这个字段进行统计,分了共9档(数据呈右偏态分布)[如下图所示],对这些样本打标记;
然后把label作为目标变量y,训练了一个回归模型,预测这个label;
因为是回归模型,预测出的label值是连续值(分类问题的话预测值就是0-8的离散值),e.g., 是1.42359,4.93830 这种float number

请问:
1. 为什么经过模型训练后(70%训练集,30%测试集)的label的方差,相比之前全量数据9档的方差,要变小了?
2. 需要找到一个方法,将预测出的薪酬label重新映射回月薪值/合理的薪酬区间,薪酬区间该如何设计能把方差重新拉大一点?

第1问现在理解了:
“你设想一下,如果有 50 个工资是 5999 的人,50 个工资是 6001 的人。。。
这样就是 50 个 label 1 ,50 个 label 2
但是你预测出来可能就是 100 个 label 1.4~1.6 。。。
这当然。。。方差就小了。。。”

但第2问还是不太确定,领导提出了2种思路:
1)用动态规划算法,自动找到每个label应从属的最佳薪酬区间(完全不理解)
2)把低薪的区间往低里拉宽,高薪的往高里拉宽,可以引入一个超参数a,比如a=1是区间不动,a=1.2就是把区间拉长1.2倍,a=0.8就是缩短0.8倍,但是得找到一个最优的中间点,假如6000是中间点,那么往左:原本是4000-6000, 乘上a=1.2后,这个区间被拉长成了1600-6000;往右:原本是6000-7000,被拉长成了6000-8400;这个方法不知道怎么找到最优的中间点和最优的a。

我猜一下,是不是要找到原始全量样本真实薪酬的均值作为最优中间点、比较模型前后label方差缩小了多少倍,这里就乘以多少倍来放大?

我另一个想法是:
想象一个以 label 为x轴,以其对应的真实薪酬数据为y轴,那么原始的分档数据是一条上升的折线;
现在要找到一个预测的label(float num) VS 真实薪酬y 的最优拟合曲线,它有着更大的斜率,使得方差也变大;
直接用了多项式拟合找到这条曲线的表达式,然后输入x=0-8,去倒推y的值,将这些y值作为新的薪酬区间的临界点;
图3是多项式拟合后的(x, y)的值

不知道思路对不对?
label-bef.png
2019-5-30 00:18
pred.png
2019-5-30 00:19
polyfit.png
2019-5-30 00:19
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

回复 1# cheng

很困难的对吧?因为从一开始就是错的!
你不懂就算了,看来你们的所谓领导也不懂,简直蛮干!

线性回归的要求是什么?自变量因变量都得是连续变量,而且等间隔,啥意思?就是你1和2,2和3,3和4之间的差距得相等,你这里等么?
0到1,差2000,1到2,只差1500,越后面越乱

何况你的标签不是个连续变量,是个分类变量
看到分类变量最自然的想法是什么?线性回归么?别逗了,是逻辑回归(Logistic regression)
逻辑回归得出来的结果是某一个自变量情况下因变量被归入任意给定类的概率,一般选概率最大的那个为预测值,因此最后的预测值就是分类本身,而不会给出浮点数这么搞笑的东西
当然你这里标签还是个顺序分类变量,需要用顺序逻辑回归

具体的我懒得讲,太多,给你本书好了,在附件里,好好读5、6、7三章,尤其第7章,你需要的东西在那里
[Alan_Agresti(auth.)]_Categorical_Data_Analysis,_S(b-ok.xyz).part1.rar (900 KB) [Alan_Agresti(auth.)]_Categorical_Data_Analysis,_S(b-ok.xyz).part2.rar (900 KB) [Alan_Agresti(auth.)]_Categorical_Data_Analysis,_S(b-ok.xyz).part3.rar (900 KB) [Alan_Agresti(auth.)]_Categorical_Data_Analysis,_S(b-ok.xyz).part4.rar (900 KB) [Alan_Agresti(auth.)]_Categorical_Data_Analysis,_S(b-ok.xyz).part5.rar (15.34 KB)

TOP

首先感谢回复!

但是你误会啦,图2的那些预测值,不是线性回归出来的,是跑了个梯度提升树模型LightGBM回归出来的,机器学习算法;

我的问题主要是如何将回归出的label值重新映射回薪酬区间

TOP

回复 2# 战巡

逻辑回归我知道是广义线性模型,是用来处理分类问题的;
这里我们还是解决回归问题

TOP

回复 3# cheng

不管你用啥回归,啥模型,本该是分类变量的你就应该得出分类变量结果,如果你得到了连续变量的结果,那只能说明模型错
而这里你在使用错误模型的情况下非要强行把连续变量变成一个分类变量,能有好结果么?

TOP

没有看太懂。稍后再看。

TOP

回复 5# 战巡

我们一开始的确是尝试的分类模型,而且试了很多种不同的分档label,但效果都不是很好,因为高薪的数据比低薪的少了很多,不平衡,0-8档数据是右偏态分布,第二档为最高点;

于是我们才尝试对label做回归的,效果比分类的要好一点;

只是目前的问题还是在如何将预测出的label 映射回薪酬区间。。

TOP

回复 7# cheng


反正我没明白你们具体想干啥
标签和收入区间是严格等同的,比如你定义的月薪2000到4000就是标签0,根本没有随机性,也没有任何改动的余地,为什么还要纠结回归的问题?

你的自变量根本不知道是啥,一个正常的模型应该是在不知道具体月薪的情况下使用一系列乱七八糟的其他变量去预测这个标签,而不是用月薪去预测月薪本身的标签

至于你们试过什么分类模型,具体怎么用的我不知道,我只知道你们现在这种做法是蛮干

TOP

嗯,没有用薪酬去预测label啊。。表1是用来给样本重新打标记、作为目标变量的一个简单的映射表,是根据数据统计结果,拍脑袋出来的,不存在算法;

以下是特征变量的部分截图:
feats.png
2019-5-30 17:32

TOP

回复 9# cheng


你还是没讲清楚你们到底想干什么

假设你们想用这一大堆东西去预测月薪,那直接回归就完事了,根本没有必要把月薪离散化分9类,那是自找麻烦而已,连续变量离散化的时候永远是要损失信息量,且永远是带有很强主观因素的

假设你们想用这一大堆东西预测月薪分类的标签(也就是你们只知道分类,不知道具体月薪值),那直接按分类变量处理,用顺序逻辑回归就完了,怎么还有映射的问题呢?你都不知道具体月薪值

TOP

回复 10# 战巡

哦,好的。。那晚点我试下直接用薪酬值做回归吧

谢谢!

TOP

返回列表 回复 发帖