数据分析必知系列之线性规划问题(ROI &Python 求解线性规划问题)

数据分析始终是为公司的商业目标服务的。商业目标的核心目标之一是利润最大化,而在现实生产中,利润最大化问题必然涉及ROI(return on investment),并且是多种限制条件下资源的最优分配问题,转化为数据建模或者数学问题就是线性规划问题。

线性规划问题,很多同学在高中数学中就学过了,不过在有限的纸笔工具条件下,我们只能求解二元变量的线性规划问题。在商业实际中,变量的数目往往在三个或以上,这时如何求解线性规划问题呢?

很多数学或编程软件可以帮助我们解决这一问题,如Matlab、Maple,Linggo、Lingdo、Python等。现在我们用数据分析中最常用的编程语言Python来求解线性规划问题。

实例:已知某游戏1天内各渠道的导流情况如下:

  1. 分析每个渠道

  2. 假如公司对这款游戏的月推广预算是1000万(1个月按30天计算),要求在以上渠道中进行广告投放,且要求引入的用户数达到20万以上。如何选择渠道投放能使公司利益最大化?

一、ROI

ROI=净利润/投资资本总额*100%。要计算ROI,首先需要知道成本、收入以及净利润。

ROI就是问题1所要分析的指标。可以根据“ROI=总净利润/总成本”或“ROI=单用户净利润/单用户成本”计算ROI。

分析方法及结果如下表:

显然,ROI和引入用户量是公司重点考虑的指标。从ROI、引入用户量的角度分析,结论如下:

渠道C的ROI最高,B次之,C最低;但渠道A引入用户数量最高,C最低。

二、用Python求解线性规划问题

问题2显然是线性约束下的最优化问题:

目标函数

= 340007200 24708

将上述数学语言转为Python语言:

Python求解线性规划问题的函数是科学计算包scipy中的optimize.lingrog:

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method=‘simplex’, callback=None, options=None)

  1. 函数参数含义

(1) c为目标函数中的系数组成的数组:

若求目标函数最小值,则c为目标函数中各系数组成的数组;

若求目标函数最大值,则c为目标函数中各系数的相反数组成的数组。

(2) A_ub为约束条件中不等式左边系数组成的矩阵,在python中为元素为数组的数组。

若约束不等式为<=,则为约束不等式左边各系数组成的数组;

若约束不等式为>=,则为约束不等式左边各系数的相反数组成的数组。

(3) b_ub为约束条件中不等式右边的常数项组成的数组

若约束不等式为<=,则为约束不等式右边常数项组成的数组;

若约束不等式为>=,则为约束不等式右边常数项的相反数组成的数组。

(4) A_eq为约束条件中等式左边系数组成的矩阵,在python中为元素为数组的数组。

(5) b_ub为约束条件中等式右边的常数项组成的数组。

若没有等式约束条件,则A_eq和b_eq为由0组成的数组,但0的个数须与自变量的个数相等。

上述问题Python代码如下:

输出结果如下:

从输出结果中可以看出:B、C渠道投放的天数均为最大值30天,因为B、C渠道的ROI最高,在能达到“引入的用户数20万以上”的条件下,显然应该优先投放ROI最高的渠道。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值