TowardsDataScience 博客中文翻译 2020(三百三十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

ECCV 2020 文摘

原文:https://towardsdatascience.com/eccv-2020-digest-d1244737e68?source=collection_archive---------27-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自的图像用于视频场景理解的概率未来预测

专家最有趣的自驾研究。

两周前,数千名计算机视觉研究人员聚集在 ECCV欧洲计算机视觉会议展示他们的最新成果。想看一眼最新的自动驾驶技术吗?这份文摘是给你的。

除了下面的论文,还可以查看我帮助组织的【g】标杆轨迹预测模型5 级行业网络研讨会 Kaggle ML 竞赛。**

感觉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自跟踪的图像通过环视静态场景出现,具有神经 3D 映射

基于柱子的自动驾驶物体检测

麻省理工和谷歌 的论文——作者提出了一个完全基于支柱的无锚点物体检测模型。这项工作将圆柱投影纳入多视图特征学习,预测每个支柱的边界框参数,而不是每个点或每个锚,这简化了 3D 对象检测,同时显著改善了最先进的技术。

用于自监督三维物体检测的单目可微分渲染

来自丰田研究所的论文从图像中获取 3D 地面真实标签是一项艰巨而昂贵的任务。本文提出了一种自我监督的替代方案,该方案使用预训练的单目深度估计网络、差分渲染和定制的自我监督物镜来精确预测帧中所有对象的 3D 位置和网格。

雷达网:利用雷达对动态物体进行鲁棒感知

来自 ATG 优步的论文一种联合使用激光雷达和雷达传感器进行目标探测和速度估计的方法。他们提出的 DNN 可以分为 2 个步骤:首先,基于体素的激光雷达和雷达数据的表示由主干和检测网络进行融合和处理。然后,执行另一次后期融合,并通过注意机制,通过与雷达数据融合来细化对象的径向速度。

重新思考伪激光雷达表示

来自 SenseTime 的论文— 对于 2D 探测任务,通常使用中间表示和任务来提高性能:其中一种方法使用伪激光雷达表示,即通过深度估计将 2D 输入转换为类似激光雷达的输入,然后由针对激光雷达输入的 3D 探测而定制的网络对其进行处理。在这项工作中,作者研究了这一点的惊人用途,但得出的结论是,激光雷达表示对任务没有帮助:在这里,他们提出了图像空间的变换和相应任务的网络,并表明这产生了可比的结果。

跟踪通过环视静态场景,用神经 3D 映射出现

来自 CMU 的论文——一种新的无监督 3D 对象跟踪方法,通过利用静态点的多视图数据训练 3D 映射网络,然后可以使用这些数据来产生可用于搜索和对应 3D 对象的特征。

朝向流感知

来自宾夕法尼亚大学的论文在这项工作中,作者批评了视觉社区对“离线”方法的主要关注,并提出了一种结合多任务延迟和准确性的新评估设置:核心思想是将输入和输出(例如,对象检测任务)解释为流,并在评估期间将每个地面真实值与最近的预测进行比较。

福根:看到雨夜

来自 CMU 和阿尔戈艾的论文— 众所周知,数据偏差会极大地降低算法性能。为了解决这一问题,作者提出了一种新的基于 GAN 的图像到图像翻译架构,该架构解耦了域不变和域特定内容。提出的 ForkGAN 通过首先将夜间获取的图像转换为白天的图像,显著提高了在白天图像上训练的网络的性能。

用变形金刚进行端到端的物体检测

来自脸书的论文— 一种新的物体检测方法,不再需要许多手工制作的组件。主干用变换器编码器-解码器结构代替,整个任务作为直接集预测问题来计算成本。性能显示了这种新方法如何能够以少得多的操作和手动调整的参数产生与当前技术水平相似的性能。

预测和规划

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 DSDNet:深度结构化自驾网络

DSDNet:深度结构化自驾网络

论文来自优步 ATG 深度神经网络,用于联合学习自动驾驶的感知、预测和规划。基于激光雷达和地图输入,CNN 中枢学习探测物体。随后是预测层,它使用能量公式来推理多个智能体的社会似是而非的轨迹,最后是规划层,它将此考虑在内来规划安全轨迹。

PiP:自主驾驶的规划告知轨迹预测

来自香港大学的论文- 作者提出了一种管道,该管道不仅使用历史数据和当前位置,还将计划的自我轨迹考虑在内,从而引入了一种端到端的架构,该架构由交互的计划和预测模块组成。

学习车道图表示法进行运动预测

来自优步 ATG 的论文— 一种图形神经网络变体,可以比传统的光栅化地图图像更简洁地编码地图信息。然后,他们使用融合网络将来自 LaneGCN 的地图信息与从当前和以前的位置信息中提取的演员特征相结合,以做出最先进的多模态轨迹预测。

从观察和交互中学习预测模型

来自 UPenn、Berkeley 和 Stanford 的论文— 注入无监督的观察数据,例如来自车辆仪表板摄像头的数据,可以显著提高模型的准确性。为了克服无监督的性质以及领域差异,他们提出了一个图形模型,该模型根据交互作用以及分布先验上的观察数据来推断作为潜在变量的真实行为。

用于视频场景理解的概率未来预测

来自 Wayve 的论文— 作者从 RGB 视频中学习一种概率潜在表示,可用于对似是而非的未来进行采样。该框架首次联合预测自我轨迹、未来场景语义和几何以及其他智能体的动态。通过条件变分自动编码器方法学习潜在表示,该方法根据观察到的未来来调节所有可能的未来

猛击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 DA4AD:面向自动驾驶的端到端深度注意力视觉定位

DA4AD:基于端到端深度注意力的自动驾驶视觉定位

来自百度的论文这项工作展示了单目视觉里程计的最新技术水平。这是通过将 VO 流水线的三个关键元素公式化为 ML 问题并采用神经网络对每个元素建模来实现的。

NeRF:神经辐射场

来自加州大学伯克利分校 的论文——在今年最具标志性的简历论文之一中,作者训练了一个网络来构建 3D 模型,并从现有的图片集中推断出现实主义的小说观点。结果明显优于以前的结构从运动和 ML 渲染方法。

深度 SFM:通过深度束调整从运动中构造

复旦大学和 Nuro 的论文提出了一种新的基于深度光束法平差的运动结构(SFM)方法。通过引入分别用于深度和姿态估计的两个成本体,照片一致性和几何一致性在训练期间被共同加强,这提高了深度和姿态估计的性能,并具有优越的鲁棒性。

模拟和安全

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自通过模拟感知和预测测试自动驾驶车辆的安全性

交通事故因果关系认定基准

首尔国立大学的论文本文提出了一个新的数据集,分析交通事故视频流中的因果关系。作者抓取 Youtube 以获得交通事故的剪辑,然后在时间上但也在语义上标记事故的影响和原因。基于此,不同的基准算法基于它们的分类性能被评估。

通过模拟感知和预测测试自动驾驶车辆的安全性

来自 ATG 优步的论文作者从模拟数据开始模拟感知-预测堆栈输出。虽然模拟整个堆栈需要像 CARLA 这样的 3D 模拟器,但这种方法完全跳过了原始数据模拟(激光雷达、相机),只专注于模拟鸟瞰栅格。这大大减少了从模拟到现实世界的测试时间。

数据集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像来自mapi pile 交通标志数据集,用于在全球范围内进行检测和分类

对全球范围内的交通标志数据集进行检测和分类

来自 Mapillary 的数据集在这项工作中,作者收集了可用于交通标志检测(where)和分类(what)的最大数据集。该数据集涵盖多个国家,包括来自 300 多个不同标志类别的 52k 完全注释图像。

数据科学家的计量经济学 101

原文:https://towardsdatascience.com/econometrics-101-for-data-scientists-584f4f879c4f?source=collection_archive---------18-----------------------

数据科学家如何利用经济学家的工具箱

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔·塞拉斯Unsplash 上的照片

数据科学领域的人员通常对使用微观数据来解决特定领域的业务问题感兴趣。然而,对于他们来说,这是一个巨大的机会,可以在宏观层面上研究经济学和社会科学问题,而这些问题在传统上是社会科学学科的主题。计量经济学可能是数据科学家在这个方向上最接近的领域。本文的目的是向来自不同背景的数据科学家介绍计量经济学中使用的一些基本概念和工具,以及它们如何与我们所知的数据科学实践相关联。这主要是一篇介绍性的文章,只是触及了表面,但是如果有足够的兴趣,我可能会写更多关于特定工具和用例的文章。

什么是计量经济学?

基本上有两种经济学家:发展理论的人和检验这些理论的人。计量经济学家是使用统计技术来理解和解释具有经济维度的社会现象的后一类人。

计量经济学用例的一个例子是测试教育年限与工资率有关的假设,并能够使用经济理论和数据的组合来量化这种关系。另一个例子是使用历史数据测量汽油需求的价格弹性——即汽油消费对市场价格变化的敏感度。

计量经济学通常解决什么问题?

计量经济学处理与经济学有关的所有社会问题。该领域主要涉及宏观经济现象,如就业、工资、经济增长、环境、农业、不平等等。下面是来自计量经济学期刊的一个关于宏观经济问题的小样本:

计量经济学工具箱

除了一些例外,计量经济学工具箱中的大多数东西应该为数据科学家或任何计算科学家所熟悉。以下是一些常用工具的示例:

  • 描述性统计(集中趋势和分散程度的测量)
  • 推断统计和假设检验
  • 时间序列建模和预测
  • 各种回归
  • 因果推理方法

除了统计模型之外,经济学家还广泛使用数学模型。事实上,经济学家经常被“指责”在模拟人类行为时使用了太多的数学。对这门学科有广泛的批评,他们试图模仿自然系统的确定性模型来描述复杂的人类行为问题,退一步说,这些问题相当不可预测或具有概率性。

最后但同样重要的是,可以说计量经济学工具箱中最重要和最强大的工具是面板数据模型。这个话题值得另文讨论,但我会在下面简单介绍一下。

面板数据模型

如果你之前没有听说过“面板数据”或“纵向数据”,那么这里是的一些描述。一个面板数据基本上是一个多维数据的观察,这是随着时间的推移重复测量。换句话说,这是一个数据集,其中测量了多个变量***——如个人、组织、家庭、城市、国家。***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是面板数据的样子。消息来源

顾名思义,面板数据模型是一种统计工具,它提供了关于个体间和时间上差异的信息。以下 4 种是最流行的面板数据模型:

  • 汇集 OLS
  • 固定效果
  • 随机效应
  • 混合效果

理解这些模型需要一些讨论和数学公式。这个链接对这些建模框架进行了很好的讨论。

数据科学家的一些资源

  • 计量经济学与 R :一个开放源码的书,理论与计量经济学模型的 R 实现
  • 带 R 的计量经济学原理:另一本带 R 实现的书。我认为这本书对这一领域的初学者来说可能更容易理解
  • 在这个源中有面板数据建模相关的资源在一个地方
  • 那些喜欢看而不是读的人,这里有几个 YouTube 频道对面板数据模型的简单解释,它们的估计器和 R 中的相关代码

临终遗言

数据科学家在深入研究当今社会面临的社会和环境问题方面具有很大优势。他们不应该担心这是经济学家的领域,他们是局外人。我宁愿说,拥有不同背景和跳出框框思考能力的数据科学家比接受传统学科训练的人更有能力描述和预测社会问题。

如果你有问题想联系我,我在推特上。

使用 Python 的经济指标

原文:https://towardsdatascience.com/economic-indicators-with-python-befb8b35af4d?source=collection_archive---------17-----------------------

使用 Python 和 Plotly 检索和绘制经济指标

经济指标经常被经济学家和金融分析师用来预测经济周期。在做投资决策之前,这个分析是非常重要的。

在本文中,我们将使用 Python 自动提取经济指标数据。我们需要的只是蟒蛇和熊猫。我们将为欧盟分析数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Unsplash 的保罗·费德勒的照片

经济指标-类别

首先,让我们从一点理论开始。我想在这篇文章中介绍三大类经济指标。滞后指标,重合指标,超前指标。

  • 滞后指标是那些在新一轮经济周期开始后发生变化的指标。
  • 重合指标确实与周期峰值同时变化
  • 领先指标确实能预测变化,因为它们发生在经济周期变化之前。

这些指标有不同的衡量标准,由不同的来源发布,如 OECDConference Board 。通过查看会议委员会的网站,我们可以很容易地找到以下三类经济指标:

领先指标中,我们发现制造业的平均周工作时间、建筑许可、股票价格和领先信贷指数等等。

重合的 指标内,我们发现*工业生产和制造业、*贸易销售额等。

最后,在**滞后指标中,我们发现*平均失业持续时间商业和工业贷款*、消费者服务价格指数和库存与销售比率

你可以在会议板网站中找到这些指标的定义。

让我们用 Python 获取其中的几个来分析一下欧盟目前的经济形势。使用数据库经济学中的免费 API 提取所有指标。

我们用 Python 检索的经济指标有:利息、GDP 增长、失业率零售贸易变化和 10 年期欧元收益率曲线* 。好了,我们转到编码部分!*

检索经济指标的 Python 脚本

首先是导入我们将使用的所有必需的库。即熊猫*、 Json请求剧情。*

我们将使用 Json请求从 API 中检索数据。然后,我们将使用熊猫来处理数据。最后, Plotly 创建我们的图形。

*import pandas as pd 
import requests 
import json 
import plotly.graph_objects as go*

一旦我们导入了所有需要的库,我们就可以开始检索经济指标了。因为我们将提取多个指标,所以我们将构建一个可以重用的函数来提取所有指标。我将这个函数命名为 checkindicator :

*def checkindicator(url):
    r= requests.get(url)
    r = r.json()
    periods = r['series']['docs'][0]['period']
    values = r['series']['docs'][0]['value']
    dataset = r['series']['docs'][0]['dataset_name'] indicators = pd.DataFrame(values,index=periods)
    indicators.columns = [dataset]
    return indicators*

我们的函数向将返回经济数据的 API url 发出请求。url 提取自数据库经济学。简单地说,我们进入 DBnomics 网站,搜索指标,选择它并复制 API 链接。

然后,我们传递 API 链接作为我们的 checkindicator 函数的一个参数,如下所示,以获取欧盟的选定指标。在我们的第一个例子中,我们将提取利率*。*

因为我们的 API 响应返回一个大的 json 对象,所以我们解析它以提取句点和值,如上面的代码所示。然后,我们创建一个包含日期和利率值的 Pandas 数据框架。

*interest = checkindicator('https://api.db.nomics.world/v22/series/Eurostat/ei_mfir_m/M.NSA.NAP.MF-LTGBY-RT.EU28?observations=1')*

运行代码后,我们的清单函数将返回一个包含每月利息信息的熊猫数据帧。如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们准备提取所有其他指标。我们将以熊猫数据帧的形式将它们存储在变量中。既然我们已经提取了经济指标,我们可以将它们绘制在一起。

*euro_yields_10y = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/irt_euryld_m/M.EA.INS_FWD.CGB_EA.Y10?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/irt_euryld_m/M.EA.INS_FWD.CGB_EA.Y10?observations=1'))unemployment = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/une_rt_m/M.NSA.TOTAL.PC_ACT.T.EA19?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/une_rt_m/M.NSA.TOTAL.PC_ACT.T.EA19?observations=1'))interest = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/ei_mfir_m/M.NSA.NAP.MF-LTGBY-RT.EU28?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/ei_mfir_m/M.NSA.NAP.MF-LTGBY-RT.EU28?observations=1'))inflation = checkindicator('[https://api.db.nomics.world/v22/series/WB/WDI/FP.CPI.TOTL.ZG-EU?observations=1'](https://api.db.nomics.world/v22/series/WB/WDI/FP.CPI.TOTL.ZG-EU?observations=1'))GDPgrowth = checkindicator('[https://api.db.nomics.world/v22/series/WB/WDI/NY.GDP.MKTP.KD.ZG-EU?observations=1'](https://api.db.nomics.world/v22/series/WB/WDI/NY.GDP.MKTP.KD.ZG-EU?observations=1'))monthly_change_retail_trade = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/sts_trtu_m/M.TOVT.G47.CA.PCH_SM.EA19?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/sts_trtu_m/M.TOVT.G47.CA.PCH_SM.EA19?observations=1'))*

用 Python 绘制经济指标

为了用 Python 绘制我们的经济指标,我们将使用一个名为 Plotly 的库。

首先,我们需要导入它。接下来,我们需要创建一个 对象,我们将在其中添加痕迹。在我们的例子中,一个 迹线 将代表一个经济指标。因此,我们将拥有尽可能多的想要包含在图表中的指标。

为了简单起见,现在让我们只画出利率* 利率。在我们的 add_trace 对象中,我们指定 x 作为我们的 DataFrame 的索引(即索引代表日期)。而 y 将代表我们的值(即与每个日期相关的利率)。*

然后,我们使用**figupdated _ layout来使图形看起来更好看,并包含一个日期滑块和一个标题*😗

*import plotly.graph_objects as gofig = go.Figure()
fig.add_trace(go.Scatter(
                x=interest.index,
                y=interest['Interest rates - monthly data'],
                name="interest",
                line_color='deepskyblue',
                opacity=0.8))fig.update_layout(xaxis_range=['2003-07-01','2020-12-31'],
                  title_text="Interest Rates, Unemployment, 10y    yields, inflation UE, volume sales",xaxis_rangeslider_visible=True)fig.show()*

如果我们现在运行我们的代码,我们将得到下图,其中包含欧盟超过 15 年的 利率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 Python 和 Plotly 实现经济指标

到目前为止一切顺利。现在让我们加上所有其他经济指标,如失业率、GDP 增长等。到我们的 Python 图。

我们可以简单地通过添加新的轨迹来实现。见下面的代码,以绘制我们所有的宏观经济指标在一起。如上所述,每个轨迹代表不同指示器。我们为每个轨迹更改了名称和 l 线条颜色:

*fig = go.Figure()fig.add_trace(go.Scatter(
                x=interest.index,
                y=interest['Interest rates - monthly data'],
                name="interest",
                line_color='deepskyblue',
                opacity=0.8))
fig.add_trace(go.Scatter(
                x=unemployment.index,
                y=unemployment['Unemployment by sex and age - monthly average'],
                name="unemployment",
                line_color='red',
                opacity=0.8))
fig.add_trace(go.Scatter(
                x=euro_yields_10y.index,
                y=euro_yields_10y['Euro yield curves - monthly data'],
                name="euro_yields_10y",
                line_color='green',
                opacity=0.8))
fig.add_trace(go.Scatter(
                x=inflation.index,
                y=inflation['World Development Indicators'],
                name="inflation",
                line_color='orange',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=GDPgrowth.index,
                y=GDPgrowth['World Development Indicators'],
                name="GDP growth",
                line_color='pink',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=monthly_change_retail_trade.index,
                y=monthly_change_retail_trade['Turnover and volume of sales in wholesale and retail trade - monthly data'],
                name="% Monthly Change Volume Sales",
                line_color='black',
                opacity=0.8))fig.update_layout(xaxis_range=['2003-07-01','2020-12-31'],
                  title_text="Interest Rates, Unemployment, 10y yields, inflation UE, volume sales",xaxis_rangeslider_visible=True)fig.show()*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Python 的宏观经济指标

不错!我们可以使用图表区域下方的滑块来动态更改图表的日期。

包扎

我们用 Python 创建了一个检索经济指标的脚本。然后,我们用 Plotly 将它们绘制在一起。

您可以根据想要分析的经济领域来更改或添加新的指标。可以对不同的国家进行类似的分析。我们已经为这个职位选择了欧元区。但是您可以通过修改 url 参数来轻松地更改它。

作为参考,请看下面用 Python 和 Plotly 构建一个显示经济指标的图表的最终代码。

如果你理解代码有困难,我在 Youtube 上有一个视频,一步一步地讲解代码和 API:

面向金融的 Python-使用 Python 绘制经济指标

*import pandas as pd
import requests
import json
import plotly.graph_objects as godef checkindicator(url):
    r= requests.get(url)
    r = r.json()
    periods = r['series']['docs'][0]['period']
    values = r['series']['docs'][0]['value']
    dataset = r['series']['docs'][0]['dataset_name'] indicators = pd.DataFrame(values,index=periods)    
    indicators.columns = [dataset]
    return indicators   

euro_yields_10y = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/irt_euryld_m/M.EA.INS_FWD.CGB_EA.Y10?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/irt_euryld_m/M.EA.INS_FWD.CGB_EA.Y10?observations=1'))unemployment = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/une_rt_m/M.NSA.TOTAL.PC_ACT.T.EA19?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/une_rt_m/M.NSA.TOTAL.PC_ACT.T.EA19?observations=1'))interest = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/ei_mfir_m/M.NSA.NAP.MF-LTGBY-RT.EU28?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/ei_mfir_m/M.NSA.NAP.MF-LTGBY-RT.EU28?observations=1'))inflation = checkindicator('[https://api.db.nomics.world/v22/series/WB/WDI/FP.CPI.TOTL.ZG-EU?observations=1'](https://api.db.nomics.world/v22/series/WB/WDI/FP.CPI.TOTL.ZG-EU?observations=1'))#inflation.columnsGDPgrowth = checkindicator('[https://api.db.nomics.world/v22/series/WB/WDI/NY.GDP.MKTP.KD.ZG-EU?observations=1'](https://api.db.nomics.world/v22/series/WB/WDI/NY.GDP.MKTP.KD.ZG-EU?observations=1'))monthly_change_retail_trade = checkindicator('[https://api.db.nomics.world/v22/series/Eurostat/sts_trtu_m/M.TOVT.G47.CA.PCH_SM.EA19?observations=1'](https://api.db.nomics.world/v22/series/Eurostat/sts_trtu_m/M.TOVT.G47.CA.PCH_SM.EA19?observations=1'))monthly_change_retail_trade.columnsimport plotly.graph_objects as gofig = go.Figure()fig.add_trace(go.Scatter(
                x=interest.index,
                y=interest['Interest rates - monthly data'],
                name="interest",
                line_color='deepskyblue',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=unemployment.index,
                y=unemployment['Unemployment by sex and age - monthly average'],
                name="unemployment",
                line_color='red',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=euro_yields_10y.index,
                y=euro_yields_10y['Euro yield curves - monthly data'],
                name="euro_yields_10y",
                line_color='green',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=inflation.index,
                y=inflation['World Development Indicators'],
                name="inflation",
                line_color='orange',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=GDPgrowth.index,
                y=GDPgrowth['World Development Indicators'],
                name="GDP growth",
                line_color='pink',
                opacity=0.8))fig.add_trace(go.Scatter(
                x=monthly_change_retail_trade.index,
                y=monthly_change_retail_trade['Turnover and volume of sales in wholesale and retail trade - monthly data'],
                name="% Monthly Change Volume Sales",
                line_color='black',
                opacity=0.8))# Use date string to set xaxis range
fig.update_layout(xaxis_range=['2003-07-01','2020-12-31'],
                  title_text="Interest Rates, Unemployment, 10y yields, inflation UE, volume sales",xaxis_rangeslider_visible=True)fig.show()*

原载于 2020 年 2 月 1 日 https://codingandfun.com**

带 R 的经济订货批量

原文:https://towardsdatascience.com/economic-order-quantity-with-r-f511bfeec400?source=collection_archive---------24-----------------------

r 代表工业工程师

探索“sc perf”R 包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Tabakfabrik Linz 提供,可在 Unsplash

经济订货量

经济订货量( EOQ )是企业和组织内部的运营、供应链和物流部门使用的库存计划和管理方法。它表示每个订单要采购的最佳数量,以最小化组合订购和持有成本。它有助于确定满足给定年度需求所需的订单频率。

变量

  • Q :最佳订货量
  • D :年需求量
  • S :订购成本(固定成本)
  • H :单位持有成本(可变成本)
  • :持有成本(利率)
  • C :单位成本(变动成本)
  • b :单位短缺罚款成本(可变成本)*
  • ss: 安全库存 ***

*可能考虑也可能不考虑。

假设

  • 需求率是恒定的,并且在一年中均匀分布
  • 年度总需求是预先知道的(即确定性的)
  • 立即下库存补充订单
  • 存货的单价是不变的
  • 订购成本是不变的

持有成本对订购成本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

持有成本对订购成本曲线

上图显示了总成本曲线的行为,它是订单成本曲线和持有成本线的函数。由于规模经济采购,订单成本曲线随着订单量的增加而下降。另一方面,持有成本线随着库存水平的增长而线性增长。订单成本曲线和持有成本线的交点代表 EOQ

相关概念和公式

  • 经济订货量( Q ): 代表每份订单的最佳项目数量,这将导致最低的年度总成本。它的公式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **订单总数:**代表每年补货订单的数量。它的公式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **年度订货成本:**表示补货订单对应的年度成本。它的公式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **年度持有成本:**代表在仓库或存储中持有存货的年度成本。这也被认为是投资于存货(可能存在多种风险)而非其他资产的年度机会成本。它的公式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **年度总成本:**表示年度库存管理成本(即年度订货成本和年度持有成本之和)。它的公式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 R 的 SCperf 包包含多个用于多种库存计划和管理方法的函数。对于下面的例子,让我们分别考虑一下 EOQ 模型变量的这些值: D = 2400 个单位, S =每订单 10 美元, H =每年每单位 0.3 美元, ss = 0 个单位。

让我们看看 R 代码!

结果:

既然我们已经获得了关于供应链分析师必须如何适当地计划和管理库存的相关信息,让我们建立一个图表来跟踪库存在一年中的可用性,并确定补货时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不考虑安全库存的库存图

上图证实了之前获得的结果。供应链分析师必须在一年中的第 0、2、4、6、8 和 10 个月下 6 个补货订单,每个订单 400 件,因为库存正好需要 2 个月的时间才能用完。

另一方面,如果我们假设安全库存为 50 件( ss = 50),库存图表将如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上图所示,该图与原始库存图之间的唯一区别是 y 轴上移,对应于安全库存。每个订单的单位数量( Q )、需求率和订单总数分别保持不变。

总结思路

在当今竞争激烈的世界中,库存规划和管理是每个组织和企业的一项关键任务,应将其作为一种竞争优势,以尽可能低的成本实现最佳生产水平。

sc perf R 包包括多个功能,这些功能只需几行代码就可以为供应链分析师提供相关信息,使他们能够适当地计划和管理库存水平。

虽然有其他库存计划和管理软件可用,但 R 代表了一个获取简单库存计划和管理任务相关信息的伟大工具。在你的个人代码库中存储一个库存计划和管理 R 代码,只需输入相应的 EOQ 变量的值,就可以节省你大量的时间。

— —

如果你觉得这篇文章有用,欢迎在 GitHub 上下载我的个人代码。你也可以直接在 rsalaza4@binghamton.edu 给我发邮件,在LinkedIn上找到我。有兴趣了解工程领域的数据分析、数据科学和机器学习应用的更多信息吗?通过访问我的媒体 个人资料 来探索我以前的文章。感谢阅读。

罗伯特

数据科学家的经济学 101

原文:https://towardsdatascience.com/economics-101-for-data-scientists-36cf6b3f0a15?source=collection_archive---------38-----------------------

数据科学家能从经济学家身上学到什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的absolute vision拍摄

  • 你以前听说过术语计量经济学吗?
  • 你知道数学建模和统计学是数量经济学的基础吗?
  • 你知道一些最大的数据仓库是由经济研究机构维护的吗?

仅仅看着这篇文章的标题,你可能会想,真的吗?经济学和数据科学有什么关系?作为一名有偏见的经济学家,我在这里不是要讲述经济学的伟大之处,而是给出经济学如何工作的内部观点——作为展示与数据科学联系的一种方式。我将根据(1)解决的问题,(2)使用的方法和(3)应用的工具来建立这种联系。希望您能够在此过程中与数据科学原理、工具和实践进行一些比较。

问题解决

经济学家发明了一个虚构的人——经济人(Homo economics)或“经济人”——来模拟人类行为。这就是经济学家所做的一切,用经济理论理解人类行为,并使用一些分析工具和技术——其中许多是标准的统计和数学模型。

经济学家发明了一个虚构的人来描述人类行为。

经济学问题大致分为两个分支学科。微观经济学关注的是社会基本构件之间的相互作用以及相互作用的结果,而宏观经济学则是缩小更小的细节,将世界视为一个庞大的互联系统。

比方说,一家公司正在推出一款新产品。如果他们把价格定得太高,很少有人会买。另一方面,如果价格太小,公司需要大量消费者购买产品才能达到一定的收入门槛。那么最大化利润同时最小化成本的最优 T21 价格是多少呢?微观经济学可以回答这个问题。

另一方面,宏观经济学从宏观的角度看待社会。技术创新将如何改变经济?气温升高对农业 GDP 有什么影响?全球疫情将如何打击失业?这些是宏观经济学家通常感兴趣的问题。

应用领域

你会发现经济学家涉足各个领域——从失业和不平等到气候变化经济学,再到广告和税收。这里有一个小例子,其中大部分对大多数数据科学家来说都很熟悉。

行为经济学家 可以量化消费者的反应&对营销活动、降价和增加新功能的态度

农业经济学家 帮助决定如何为农民制定针对自然灾害的正确保险政策。

产业经济学家 决定商品生产水平和给定市场需求的定价机制

体育经济学家已经对“球员被选中的方式或他们的薪酬有着巨大的影响,通过个人教练的决定,甚至是整个联盟的战略转变”【来源】。

计量经济学 是统计建模在理解复杂的社会和环境问题中的应用。这确实是应用经济学的一个很大的领域,我为此写了一篇全新的文章。

* [## 数据科学家的计量经济学 101

数据科学家如何利用经济学家的工具箱

towardsdatascience.com](/econometrics-101-for-data-scientists-584f4f879c4f)

方法&技术

如果不是全部,经济学的很大一部分是数据驱动和量化的。

在数量经济学中,经济学家创建了一个真实世界的模型——一个或大或小的部分——以了解不同组成部分之间的关系、它们的相互作用以及外部影响(如政策、激励、冲击)的影响。

因此,就像任何其他复杂互联系统的建模一样,经济学家依赖于一系列数学和统计技术。

微分方程等数学模型被用来量化输入的微小变化引起的输出边际变化。例如,价格的小幅下降将如何推动产品的购买并影响公司的底线?

另一方面,统计模型被用来开发和测试关于经济主体(人、农场、企业)和政策/激励措施影响之间关系的理论。事实上,“计量经济学”的整个领域都是基于标准统计模型的应用。数据科学家应该非常熟悉几乎所有这些工具:

  • 描述性统计和假设检验
  • 相关和回归分析
  • 时间序列分析和可视化
  • 预测分析和预测
  • 面板数据建模:OLS,固定和随机效应模型

顺便说一句,许多经济学问题都是经验性的,可以通过遵循标准的科学流程来回答——提出假设、收集数据、检验假设、得出结论。然而,经济学家有时也会过于哲学化。他们通常会问一些主观的问题,其结果无法用客观的标准来衡量。

分析工具箱

如果我们从现在开始回顾 20 年,电子表格程序(主要是 MS Excel )是经济学家建立数学和统计模型的关键工具。Excel 几乎只用于可视化,即使在今天,仍有大量经济学家在使用它。

也有一小部分不同种类的经济学家喜欢用编程语言进行统计建模。 STATA 一直是(并将继续是)最受经济学家欢迎的编程平台。一小部分程序员的工具箱里会有其他程序,如 MATLABSPSS

随着新一代经济学家的出现,情况正在迅速变化。他们每天都在越来越多地拥抱开源软件平台。Python 和 R 正成为当今许多经济学家的首选平台,尽管很难说 Python 和 R 哪个更受欢迎。

很多经济学家,尤其是宏观经济学家,喜欢摆弄时间序列数据进行动态可视化,用数据讲故事。对他们来说, Tableau 似乎是一个很棒的新玩具。我认识几个经济学家朋友,他们现在专门使用 Tableau 进行交互式数据可视化和创建 web 应用程序。

临别赠言

随着学科界限的模糊,很难判断一个特定的研究问题是否属于一个特定的领域。许多经济学家现在在不同领域担任数据科学家。同样,许多数据科学家正在研究经济和行为问题,这些问题在过去是经济学家的专属领域。

每个学科都不同,但在解决的问题、使用的方法、理论结构和应用的工具方面也有相似之处。因此,从其他学科中学习一些东西来加强研究和分析能力总是好的。*

技术人员的经济学——需求(上)

原文:https://towardsdatascience.com/economics-for-tech-people-demand-part-1-44a9eb9a576a?source=collection_archive---------35-----------------------

使用 R 和 ggplot2 了解需求经济学

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由乔治·特罗瓦托Unsplash 上拍摄

这个项目之所以存在,是因为我注意到,对于“需求”这个词在经济背景下的实际含义,尤其是在技术领域,存在着大量的误解。

谁要求东西?什么是曲线?需求曲线为什么会变化?为什么说价格的变化意味着需求的变化是错误的?需求和需求量的区别是什么?弹性到底是什么意思?怎么才能算出最大总收入?

介绍

在这篇文章中,我们要做的是使用 R 编程来分析和可视化我在 Excel 文件中创建的一些真实数据,探索需求中的概念。

从结构上来说,我们将使用 10 家假设的公司来分析对我们假设的新软件即服务(SaaS)应用程序的需求,该应用程序对每个许可证收取月费。这里有各种各样的公司,从小型到大型,他们愿意为多少许可证支付多少价格。

然后,我们将检查市场需求,并打破需求弹性的概念,试图找到我们最大化总收入的地方。

这是通过基于项目的工作在技术背景下解释经济学的多部分系列的第一部分。

在这项工作中,我在 Mac 电脑上使用 RStudio,带有 R Markdown (RMD)文件。

所有文件都可以从我的 GitHub 这里下载。

注意:如果您使用的是 Mac,请不要打开带有数字的文件。它会自动改变文件的编码,R 会不高兴的。如果发生这种情况,请删除该文件并下载一份新的 Excel 文件。

我还假设您可以设法在本地机器上设置一个 R 环境。最好是把你所有的文件放在一个文件夹里,无论你在哪里捣鼓按钮。

我们开始吧!

设置

导入数据

有时候用 r 导入 Excel 文件会有点棘手。

我认为使用 RStudio 最简单、最不容易混淆的方法是创建一个文件夹,用作您机器上的工作目录,然后单击“文件”选项卡,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中“文件”标签的屏幕截图

从那里,点击右边的三个点(…)。您可以导航到机器上数据和 R 文件所在的文件夹。

接下来,点击带有下拉菜单的“更多”按钮,然后点击“设置为工作目录”。这将有助于简化数据导入,并且是一个好习惯,因为它简化了 RStudio 中的代码和文件管理[1]。看起来是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中的更多下拉菜单

完成后,继续点击“Demand_Data.xlsx”的实际文本,使用“Import Dataset…”选项将其导入,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中导入数据集…选项的屏幕截图

这将弹出 readxl 数据导入窗口,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中“导入 Excel 数据”窗口的屏幕截图

它应该自动工作,但仔细检查数据看起来不错。确保选中“第一行作为名称”框,以避免不必要的代码来正确地将它们放在一起。如果您想将数据集重命名为“Demand_Data”以外的名称,现在是这样做的好时机,这样可以避免不必要的代码。然而,您应该让它独自跟随这里。

完成后,让我们开始捣碎一些按钮!

代码

加载库

我们将需要这个项目的 readxl 和 tidyverse 库。如果您的 R 环境中没有安装它们,只需删除代码[1]中“ install.packages… ”行前的“ # ”符号。一旦安装了它们,您就不需要在您的机器上再次安装它们。

代码如下:

# If you do not have readxl or tidyverse installed, uncomment the following lines
# install.packages("readxl")
# install.packages("tidyverse")# Load Libraries
require(readxl)
require(tidyverse)

检查数据导入

让我们检查一下数据是否正常。我的代码显示了用代码而不是点击按钮来读取 Excel 文件的方法。确保您的工作目录设置在正确的位置,这样您就不必寻找整个文件路径。

我们将使用 head() 函数来检查前几行是否好看。

代码如下:

# Import data
Demand_Data <- read_excel("Demand_Data.xlsx")# Check data import
head(Demand_Data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中需求数据前六行的屏幕截图

快速测试图

当处理经济数据时,做一个快速的图表总是一个好主意,只是为了确保没有什么奇怪的事情发生。记住,需求曲线,除了极少数例外,都是向右下方发展的[2]。让我们随机选择一列数量来绘制,并确保它通过这里的气味测试。

代码如下:

# Test plot
plot(Demand_Data$Qd_6, Demand_Data$Price, type = "l", main = "Test Plot", xlab = "Quantity", ylab = "Price")

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快速绘制其中一个数量列与价格的关系图,以便在 Mac 上检查 RStudio 中的数据

我知道,这不是你见过的最漂亮的图表。关键是,我们的数据通常向右下方倾斜,这正是我们想要看到的!谢谢需求定律[2]!

绘制所有个人需求曲线

看到一个图很好,但是同时看到我们所有的 10 条个人需求曲线会怎么样呢?我们将使用 ggplot 的魔力来实现这一点。

如果说随着时间的推移,我对 ggplot 有所了解的话,那就是整个软件包都是喜怒无常的,只以一种非常特定的方式喜欢数据。我们需要以一种与 ggplot 做事方式相适应的方式来组织我们的数据,而不是试图与系统对抗。

因此,我们将使用 stack() 函数来完成一项非常巧妙的工作,将我们的数据从 10 个不同列中的当前形式转换为一个更小、更适合 ggplot 的形式,其中价格和数量数据由 Qd_#标记在两个 glory 小列中。

在此过程中,我们将继续将其与价格数据合并到一个数据框中,以生成第三列,自动将正确的价格数据与正确的数量和标签数据放在一起。

最后,我们将更改由 stack() 函数生成的列名,使它们更适合我们的项目。

代码如下:

# Wrangle the data into a ggplot friendly structure
Wrangled_Data <- data.frame(Price = Demand_Data$Price, stack(Demand_Data[2:11]))
names(Wrangled_Data)[2] <- "Quantity"
names(Wrangled_Data)[3] <- "Qd_num"# Check the data
head(Wrangled_Data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Mac 上的 RStudio 中,ggplot 友好结构中的前六行争论和标记的需求数据

完成后,我们可以更容易地使用带有一些样式参数的 facet_wrap() 函数来优雅地显示所有的个人需求曲线。

代码如下:

# Plot the individual demand curves
ggplot(data = Wrangled_Data, aes(x = Quantity, y = Price)) +
  geom_line(color = "steelblue", size = 1) +
  geom_point(color = "steelblue") +
  facet_wrap(. ~ Qd_num)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 数据集中所有单个需求曲线的绘图屏幕截图

这里有很多东西要打开!让我们思考一下,在销售 SaaS 许可订阅的项目中,这 10 个个人需求图对我们意味着什么。

我注意到的一个现象是,许多公司并没有真正购买超过 5-6 美元的股票。随着价格降低,大多数公司开始购买更多的许可证。有些人不管价格如何都不会真的购买很多许可证,比如公司 4、8 和 10。

其他公司如公司 6、7 和 9 购买了大量许可证,并且随着价格的下降购买了更多的许可证。

其中一个基本概念是,个体企业有个体需求[2]。一些组织只是比其他组织更看重我们的 SaaS 应用程序,降低我们的价格可能不会对他们的购买决策产生太大影响[2]。

作为每月许可证的销售者,我们需要担心市场需求。让我们看看那个。

市场需求

市场需求最简单的定义是,它是所有个体企业需求曲线的总和[2]。这意味着,如果我们的市场上有 10 家公司,把所有的需求量和每个价格加起来,就会得到市场需求曲线[2]。

让我们来看看如何组装它。

代码如下:

# Create market demand
Market_Demand <- data.frame(Price = Demand_Data$Price, Market_Demand = rowSums(Demand_Data[2:11]))# Check the data
head(Market_Demand)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 的市场需求截图

策划市场需求

ggplot() 的一点帮助下,只需绘制出每种价格下我们的需求总量,就可以实现数据的可视化。

代码如下:

# Plot market demand
ggplot(data = Market_Demand, aes(x = Market_Demand, y = Price)) +
  geom_line(color = "steelblue", size = 1) +
  geom_point(color = "steelblue") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 的市场需求图截图

当我看到这一点时,我立即注意到,在这条市场需求曲线的某些范围内,价格的变化不会在曲线上的每一点产生市场需求数量的相同变化,因为它不是线性的[2]。

目测一下,我看到四个不同的区域有相似的斜率。接下来让我们来看看,并介绍弹性的概念。

弹性

需求弹性是简单地观察价格和数量的组合如何在曲线上的两点之间变化的概念。在数学上,它可以表述为数量的百分比变化除以价格的百分比变化。

简单地说,我们正在寻找两点之间的斜率,就像我们使用高中代数课上的经典公式 y = mx + b 一样,具体来说就是查看那个 m 值。

从我们的角度来看,商业问题是:

价格每改变一个单位,需求量会改变多少?

我用来说明这一点的是不同弹性区的价格范围。这可能不是世界上最正式的方式,但你真的可以看到市场需求曲线的不同区域在不同的范围内有不同的斜率。

代码如下:

# Add Elasticity zones
# 10-6.5 zone 1
# 6-4 zone 2
# 3.5-2 zone 3
# 1.5-0 zone 4
Market_Demand$Elasticity_Zone <- as.character(c(1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4))
Market_Demand

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域的市场需求截图

从使用 ggplot 进行 R 编程的角度来看,将数字向量放入函数 as.character() 中非常重要,这样 ggplot 将自动知道这些是分类值,而不是用于数学运算的数字[1]。我们将在下一个情节中看到这一点。

用弹性区域划分市场需求

虽然 ggplot 有时会令人沮丧,但它确实提供了一些很棒的特性。我们将通过在 aes() 函数中添加 color = Elasticity_Zone 来增加之前的市场需求代码,以便 ggplot 知道为每个区域分配不同的颜色[1]。

我们还将添加带有 method = “lm” 参数的 geom_smooth() 函数,使其为每个弹性区域建立线性模型【1】。稍后我们将制作一些专门的模型来更深入地研究这个问题。目前,这清楚地表明,需求曲线的不同部分可以有非常不同的斜率和弹性数字。

代码如下:

# Plot market demand with elasticity
ggplot(data = Market_Demand, aes(x = Market_Demand, y = Price, color = Elasticity_Zone)) +
  geom_line(size = 1) +
  geom_point() +
  geom_smooth(method = "lm") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Market Demand with Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5))

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场需求的弹性区域截图

更深的弹性潜水

虽然在 ggplot 中使用线性模型非常有利于可视化,但我们需要制作一些专用模型来获得精确的斜率,以便以有意义的方式比较每个部分的弹性。

为此,我们将使用 lm() 函数来创建线性模型。有许多方法可以做到这一点并过滤数据,但这里的目标是尽可能清晰易读。

我们将做同样的基本过程四次

代码如下:

### Create Linear Models #### Filter Data
Zone_1_lm_data <- Market_Demand %>%
  filter(Elasticity_Zone == 1)# Create linear model
Zone_1_lm <- lm(Market_Demand ~ Price, data = Zone_1_lm_data)# Create and print summary
summary(Zone_1_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 1 的线性模型的汇总统计屏幕截图

代码如下:

# Filter Data
Zone_2_lm_data <- Market_Demand %>%
  filter(Elasticity_Zone == 2)# Create linear model
Zone_2_lm <- lm(Market_Demand ~ Price, data = Zone_2_lm_data)# Create and print summary
summary(Zone_2_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 2 的线性模型的汇总统计屏幕截图

代码如下:

# Filter Data
Zone_3_lm_data <- Market_Demand %>%
  filter(Elasticity_Zone == 3)# Create linear model
Zone_3_lm <- lm(Market_Demand ~ Price, data = Zone_3_lm_data)# Create and print summary
summary(Zone_3_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 3 的线性模型的汇总统计屏幕截图

代码如下:

# Filter Data
Zone_4_lm_data <- Market_Demand %>%
  filter(Elasticity_Zone == 4)# Create linear model
Zone_4_lm <- lm(Market_Demand ~ Price, data = Zone_4_lm_data)# Create and print summary
summary(Zone_4_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 4 的线性模型的汇总统计屏幕截图

现在我们有了每个弹性区域的线性模型的一些详细的汇总统计数据,我们需要在项目的背景下解释这些结果。

就像任何线性模型一样,我们希望检查我们的模型是否有足够高的质量来做出可靠的解释。这意味着检查所有的 p 值是否具有统计学意义,以及 R 平方值是否尽可能接近 1[1]。

当我们查看每个模型输出的系数部分和*“Pr(>| t |)”*列时,我们看到价格系数在所有四个模型中都是一个小于 0.05 的数字。这意味着我们可以至少 95%确定我们的结果不是偶然的[1]。事实上,我们至少可以 99%确定价格和数量需求之间的关系不是偶然的,因为这一列中的所有 p 值都小于 0.01 [1]。

取决于你问的是谁,无论是倍数还是调整后的 R 平方,0.7 或更高都是非常好的[1]。R-squared 衡量模型中自变量对因变量的解释程度[1]。在所有四种情况下,我们看到我们解释了 99%以上的因变量[1]。

考虑到这一点,我们想看看列中的【Price】行的斜率值[1]。虽然从技术上来说,把价格和数量调换一下会更合适,但这样更容易理解,而且无论如何都会让我们出于商业目的回到同一个地方[3]。

让我们来看看 4 区的最后一个模型。你应该这样理解:

价格每降低 1 个单位,需求量就会增加 540.4 个单位。

这符合需求法则,因为我们降低价格,就会有更多的需求。

一旦我们知道一切都是有意义的,并很好地解释了结果,让我们根据确凿的证据对结果进行比较。

比较结果

最简单的方法是创建一个小表,从汇总统计数据中提取斜率系数。

为此,我们将制作一个带有标记列的数据框,并以表格形式查看汇总统计数据的输出。模型的…系数[2,1]…* 部分在输出中导航,以获得汇总统计输出的第二行和第一列,即斜率值[1]。最后,为了我们的理智和一般可读性,我们将结果四舍五入到小数点后两位。*

代码如下:

*# Create table of slope coefficients for each zone
slopes <- data.frame(Zone_1_slope = round(summary(Zone_1_lm)$coefficients[2,1], 2),
                     Zone_2_slope = round(summary(Zone_2_lm)$coefficients[2,1], 2),
                     Zone_3_slope = round(summary(Zone_3_lm)$coefficients[2,1], 2),
                     Zone_4_slope = round(summary(Zone_4_lm)$coefficients[2,1], 2))
slopes*

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中每个弹性区域的所有四个线性模型的斜率截屏

同样,是的,我知道从纯数学意义上讲,这不是一堆斜率[3]。它实际上是每单位价格变化时需求数量的变化[3]。这样更容易理解这个想法。

更新市场需求图

现在是时候通过标注单位价格需求量的变化来快速更新之前的市场需求图了,这样就可以清楚地看到发生了什么。我们需要将一些文本和数字粘贴在一起,适当地放置文本,并使用 abs() 函数来获得数字的绝对值,这样它们是正数,更容易阅读。

代码如下:

*# Plot market demand with elasticity
ggplot(data = Market_Demand, aes(x = Market_Demand, y = Price, color = Elasticity_Zone)) +
  geom_line(size = 1) +
  geom_point() +
  geom_smooth(method = "lm") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Market Demand with Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5)) +
  annotate("text", label = paste("Qd change / P change:", abs(slopes$Zone_1_slope)), x = 430, y = 7, size = 3, color = "black") +
  annotate("text", label = paste("Qd change / P change:", abs(slopes$Zone_2_slope)), x = 680, y = 4.5, size = 3, color = "black") +
  annotate("text", label = paste("Qd change / P change:", abs(slopes$Zone_3_slope)), x = 1150, y = 2.5, size = 3, color = "black") +
  annotate("text", label = paste("Qd change / P change:", abs(slopes$Zone_4_slope)), x = 1600, y = 1.5, size = 3, color = "black")*

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中带有单位价格数量变化标签的市场需求图截图

那么这一切到底意味着什么呢?

价格高的时候,市场相对来说比价格低的时候更缺乏 T4 弹性。当价格从 10 美元涨到 9 美元时,我们得到的订阅需求数量的影响比从 2 美元涨到 1 美元时要小得多,因为从 2 美元涨到 1 美元时,曲线相对更有弹性。事实上,从区域 1 中的某一点到区域 2 中的某一点,所需的订阅数量相差近 14 倍。

我们需要问的真正问题是:

这如何帮助我们找到最大化总收入的地方?

好问题!让我们快速了解一下。

最高总收入

首先,我们需要为我们的市场数据创建一个列,简单地将价格乘以需求数量来获得总收入[2]。

代码如下:

*# Maximize Total Revenue
Market_Demand$Total_Revenue = Market_Demand$Price * Market_Demand$Market_Demand# Check the data
Market_Demand*

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场需求数据的总收入屏幕截图

绘制数据

让我们画一张图,看看哪里的总收入最大化。

代码如下:

*# Plot market demand with elasticity
ggplot(data = Market_Demand, aes(x = Price, y = Total_Revenue, color = Elasticity_Zone)) +
  geom_line(size = 1) +
  geom_point() +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Total Revenue Curve for Market Demand with Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5))*

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场数据的总收入曲线截图

查看图表,我们可以看到,在给定市场需求数据的情况下,2.50 美元的价格是总收入最高的价格,这是第三个弹性区域。这意味着,当我们把价格从免费提高到 2 美元时,我们的收入也在不断增加。我们以 2.50 美元的价格最大化总收入,总收入为 1,850 美元[2]。随着我们继续将价格从 3 美元提高到 3 美元以上,我们的收入实际上减少了!

结论

这个故事的结果是,了解市场是有好处的。我们开始为我们的 SaaS 订阅收集市场上个别公司的数据。在每个价格下他们愿意买什么?然后我们将这些数据整合到市场数据中。有趣的是发现需求曲线并不总是直线。在曲线的不同范围内,微小的价格变化会对需求量产生一系列的影响,正如我们在最后看到的,会影响总收入的最大值。

正如我在本文开头提到的,这是许多部分中的第一部分,以一种易于理解的方式专门为技术人员解释经济概念。

我希望你喜欢这篇文章。请让我知道你对未来工作的任何反馈或建议!

参考

[1] R. Kabacoff, R 在行动(第二版。) (2015),纽约州谢尔特岛:曼宁出版公司。

[2] F .米什金,《货币经济学》,银行业,&《金融市场》(第 9 版。)* (2010),马萨诸塞州波士顿:培生教育有限公司。*

[3] P .阿加瓦尔,需求的价格弹性(PED),https://www . intelligent economist . com/Price-elastic-of-Demand/

技术人员的经济学——均衡(第三部分)

原文:https://towardsdatascience.com/economics-for-tech-people-equilibrium-part-3-74d3126b8c41?source=collection_archive---------42-----------------------

使用 R 和 ggplot2 了解均衡经济学

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

rupixen.com 在 Unsplash的照片

欢迎来到技术人员经济学系列的第 3 部分!

本系列旨在帮助人们更好地理解经济学的基本原理,同时也培养使用 R 语言的技能。我注意到关于经济学有相当多的误解和完全错误的信息,所以这里的目标是澄清这些模糊的领域。

在这篇文章中,我们将探讨这样的问题:什么是均衡?如何找到均衡价格和数量?当数字计算不完美时会发生什么?我能期望获得多少收入?

本文假设你已经很好地理解了前面的两个部分,即技术人员经济学—需求(第一部分)技术人员经济学—供给(第二部分)。这里的大部分内容都是基于这两篇文章中的代码以及对概念的解释。如果你想要完整的故事,在开始之前先看看这些。

介绍

今天,我们将利用我在 Excel 文件中创建的一些真实数据,使用 R 编程语言来探索需求和供应数据的交集。

就像前两篇文章一样,我们使用一个软件即服务(SaaS)应用程序的 10 个假设的供应商和 10 个假设的需求者,该应用程序为每个许可证收取月费。这些公司是各种规模的良好组合,并且都有不同的弹性。

这里的目标是将曲线相互叠加,找出市场在什么价格和什么数量下会达到均衡

在这项工作中,我在 Mac 电脑上使用 RStudio,带有 R Markdown (RMD)文件。

所有的数据和完成的 RMD 文件都可以在我的 GitHub 这里获得。

注:如果您使用的是 Mac,请不要打开这些带有数字的文件。它会自动改变文件的编码,R 会不高兴的。如果发生这种情况,请删除您打开的文件,并下载一份新的 Excel 文件。

我还假设您可以设法在本地机器上设置一个 R 环境。最好将所有文件放在一个文件夹中,以简化工作流程。

我们开始吧!

代码

加载库

为了完成这个项目,我们需要 readxltidyverse 包。如果您的 R 环境中没有安装它们,只需删除代码[1]中“ install.packages… ”行前的“ # ”符号。一旦安装了它们,您就不需要在您的机器上再次安装它们。

代码如下:

# Load Libraries# If you do not have readxl or tidyverse installed, uncomment the following lines
# install.packages("readxl")
# install.packages("tidyverse")require(readxl)
require(tidyverse)

检查数据导入

有时候 Excel 文件和 R 交互的时候是有气质的,尤其是 RStudio。使用下面的代码导入数据,并检查数据是否正常。

代码如下:

# Import Data
Supply_Data <- read_excel("Supply_Data.xlsx")
Demand_Data <- read_excel("Demand_Data.xlsx")# Check data import
head(Supply_Data)
head(Demand_Data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中供应数据前六行的屏幕截图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中需求数据前六行的屏幕截图

如果你导入数据,而价格Qs_#Qd_# 不是列标签,是数据的第一行,你大概会看到类似 *X1 X2 X3 等。*作为列标题。如果发生这种情况,你可以遵循我在上一篇文章科技人的经济学——需求(第一部分)的“*设置”*部分描述的相同过程。这将向您展示如何以不同的方式导入数据,从而跟上本文。

赶上进度

一旦有了数据,就应该复制/粘贴需求和供应代码的相关部分来完成繁重的工作。请参考这两篇文章,了解以下代码块的作用。

代码如下:

# Demand first# Wrangle the data into a ggplot friendly structure
Wrangled_Data <- data.frame(Price = Demand_Data$Price, stack(Demand_Data[2:11]))
names(Wrangled_Data)[2] <- "Quantity"
names(Wrangled_Data)[3] <- "Qd_num"# Create market demand
Market_Demand <- data.frame(Price = Demand_Data$Price, Market_Demand = rowSums(Demand_Data[2:11]))# Add Elasticity zones
# 10-6.5 zone 1
# 6-4 zone 2
# 3.5-2 zone 3
# 1.5-0 zone 4
Market_Demand$Elasticity_Zone <- as.character(c(1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4))# Supply second# Wrangle the data into a ggplot friendly structure
Wrangled_Supply_Data <- data.frame(Price = Supply_Data$Price, stack(Supply_Data[2:11]))
names(Wrangled_Supply_Data)[2] <- "Quantity"
names(Wrangled_Supply_Data)[3] <- "Qs_num"# Create market supply
Market_Supply <- data.frame(Price = Supply_Data$Price, Market_Supply = rowSums(Supply_Data[2:11]))# Add Elasticity zones
# 10-5.5 zone 1
# 5-4 zone 2
# 3.5-0 zone 3
Market_Supply$Elasticity_Zone <- as.character(c(1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3))

绘制均衡图

现在我们赶上了,让我们画出均衡图。

为此,我们将再次使用 ggplot。这一次有一点不同的是,代码将从第一行开始,然后一次添加一行来构建图形,而不是先将所有内容合并在一起,然后尝试用困难的方式来完成。

代码的 geom_line() 部分将声明我们使用的数据、美学,并分配几个其他样式参数。为了让它看起来更好,这段代码添加了垂直线和水平线来勾勒出轴的轮廓。我还决定用 xlim() 函数限制数据范围,因为我们实际上不会对太靠右的数据做任何事情。最后,应用一些标签。

代码如下:

# Plot the equilibrium
ggplot() +
  geom_line(data = Market_Supply, aes(x = Market_Supply, y = Price), color = "darkred", size = 1) +
  geom_line(data = Market_Demand, aes(x = Market_Demand, y = Price), color = "steelblue", size = 1) +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  xlim(0, 1150) +
  ggtitle("Market Equlibrium") +
  theme(plot.title = element_text(hjust = 0.5)) + 
  xlab("Quantity") +
  ylab("Price")

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中平衡图的屏幕截图

嗯,成功了!

在经济学中,运行良好的市场在需求数量等于供给数量的平衡点上运行[2]。这通常也被称为市场清算价格,因为所有生产的数量都是需求[2]。换句话说,没有短缺,也没有过剩[2]。

目测一下上面的图,看起来我们有一个大约 6 美元的市场清算价格和大约 200 个单位的平衡数量。

让我们确认一下这些数字,再精确一点。

找出均衡数量和市场清算价格

首先,我要说的是,我们可能至少有十几种方法可以做到这一点。为了简单起见,并使本文的范围易于理解,我们将避免使用微积分,并采用一种“对谁来说足够好”的方法,这种方法无论如何都会产生几乎相同的答案。

无关注意:短语“对谁来说足够好”是引用自一个承包商的话,当我还是个孩子的时候,他为我的房子工作。这是一个小问题,但据我所知,房子仍然是完整的!

无论哪种方式,我们都将采用这种心态。

我们将从将需求和供应数据连接到一个对象开始。我是使用 inner_join() 函数和通过 Price 加入的粉丝,因为它简单。它还能确保一切正常。由于我们在每个数据集中有一个相同行数的公共列, inner_join() 基本上充当一个“拉链”函数,将数据集组合成一个干净的产品[1]。

代码如下:

# Join data together
Merged_data <- inner_join(Market_Demand, Market_Supply, by = "Price")
head(Merged_data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Mac 上合并 RStudio 中的需求和供应数据的 inner_join()函数的屏幕截图

接下来,让我们找出供给数量和需求数量之间的差异最小的地方。我们知道它们因为图形而相交,所以对应于最小差异的价格应该是我们的市场出清价格[2]。

代码如下:

# Find difference between supply and demand
Merged_data$Diff <- Merged_data$Market_Supply - Merged_data$Market_Demand
Merged_data

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中带有数量差异栏的合并数据的屏幕截图

只要看一下图表,我们就可以知道,在 6 美元的价格下,我们看到的最小差异是 8 个单位。然而,如果我们有更多的数据,并且很难直观地分辨,会发生什么呢?

我们可以使用 which.min() 函数的组合来找到我们想要的最小值,在本例中是 Diff ,并使用 abs() 函数来获得Diff【1】的绝对值。绝对值函数是必要的,因为它不是像我们想要的那样给我们一个最小的差值,而是一个最大的负数,这不是我们想要的。函数末尾的逗号指定我们需要整行[1]。对于加分,试着去掉它,看看有什么不同。

代码如下:

# Find row of minimum difference
min_diff_1 <- Merged_data[which.min(abs(Merged_data$Diff)),]
min_diff_1

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中需求和供应差异最小的行的屏幕截图

修改情节

接下来,我们将从几个方面修改前面的情节。首先,让我们更改 xlim() 函数中的值,以便我们可以放大到更接近交叉点的位置。第二,我们可以在市场结算价格和数量上添加一些线,以便更好地可视化我们的数据。为最小差异行创建专用对象的一个优点是,我们可以在这里引用它,而不必手动输入数字或以另一种方式重复计算。

代码如下:

# Add lines to previous graph based on the min_diff_1 numbers# Plot the equilibrium
ggplot() +
  geom_line(data = Market_Supply, aes(x = Market_Supply, y = Price), color = "darkred", size = 1) +
  geom_line(data = Market_Demand, aes(x = Market_Demand, y = Price), color = "steelblue", size = 1) +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  xlim(0, 300) + ### ZOOM IN A BIT ###
  ggtitle("Market Equlibrium") +
  theme(plot.title = element_text(hjust = 0.5)) + 
  xlab("Quantity") +
  ylab("Price") +
  ### NEW LINES ###
  geom_hline(yintercept = min_diff_1$Price) +
  geom_vline(xintercept = min_diff_1$Market_Demand) + 
  geom_vline(xintercept = min_diff_1$Market_Supply)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中带有市场清算价格和近似平衡数量线的平衡图的屏幕截图

那么,为什么有两条竖线而不是一条呢?

事实证明,我们的数据精度导致了一个小问题,我们没有一个完全完美的交集。我选择将两者都放在图表上,以使这一点变得明显。

这就是说,我们应该对市场出清价格为 6 美元,真正的均衡数量在 190 年代的某个地方感觉良好[2]。

总收入

经济学中最直接的计算方法之一是总收入,因为它就是价格乘以单位总数[2]。当处于均衡时,它是市场清算价格和在该价格下的需求量[2]。

对我们来说,我们将再次引用 min_diff_1 对象,因为它包含我们的市场清算价格和数量。在计算中,我选择用 mean() 函数对需求和供应数据进行平均,然后乘以价格。这使我们在该市场的总收入达到 1,134 美元。

代码如下:

# Calculate total revenue
total_revenue <- min_diff_1$Price * mean(min_diff_1$Market_Demand, min_diff_1$Market_Supply)
total_revenue

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中按市场出清价格计算的市场总收入截图

比较和对比结果

请记住,在本系列的前两部分中,供应商希望以更高的价格销售更多的产品。

对于我们拥有的数据,当以每单位 10 美元的价格销售时,供应方的最大总收入是 9,840 美元。

在需求方面,我们的最高总收入为 1,850 美元,单价为 2.50 美元。

当我们在真实的市场场景中结合我们的数据时,市场的妥协变得很明显。市场出清价格是商品和服务的供需双方在中间相遇的地方[2]。当然,双方都没有达到理想或理论上的最大值,但这就是市场的本质。

额外材料—用线性模型预测平衡

我们有非常接近的数据,这当然很好,但是如果我们研究一些更理论化的东西,会发生什么呢?从这篇文章和前两篇文章中我们知道,我们有不同的弹性区域。从图形上看,我们可以看到非常接近 6 美元的价格是正确的,但如果我们只有几个数据点,并对线的斜率有很好的猜测,会怎么样呢?

我们将借用第一篇文章中的一些代码,创建一些线性模型,看看它们在哪里相交。这里重要的是,我们的模型解释了 99%以上的因变量,预测能力非常重要,因为我们在以下两个模型中的 p 值都非常小[1]。

关于 R 平方值和 p 值的含义的更完整的讨论,请参考前两篇文章,因为我在这里假设当我引用这些值时,您知道我的意思。

当我们查看我们的 min_diff_1 对象时,我们可以看到需求在弹性区 2 下降,而供应在弹性区 1。考虑到这一点,我们只需要建立线性模型。

先说供给。

代码如下:

# Create Supply linear model# Filter Data
supply_lm_data <- Market_Supply %>%
  filter(Elasticity_Zone == 1)# Create linear model
Supply_Zone_1_lm <- lm(Market_Supply ~ Price, data = supply_lm_data)# Create and print summary
summary(Supply_Zone_1_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中 1 区供应数据线性模型的汇总统计屏幕截图

需求是下一个。

代码如下:

# Create Demand linear model# Filter Data
demand_lm_data <- Market_Demand %>%
  filter(Elasticity_Zone == 2)# Create linear model
Demand_Zone_2_lm <- lm(Market_Demand ~ Price, data = demand_lm_data)# Create and print summary
summary(Demand_Zone_2_lm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中 2 区需求数据线性模型的汇总统计屏幕截图

接下来,我们将创建一个快速的数字序列作为新的价格数据。我将价格从 5.50 美元调整到 6.50 美元,因为这个范围正好符合供给和需求数据的弹性区域。我们将它增加 0.01 美元,这样我们可以得到更精确的结果。

代码如下:

# new price data
new_price_data <- data.frame(Price = seq(5.5, 6.5, by = 0.01))

之后,我们将使用经典的代数公式 y=mx + b 来整合我们的新数据。这将把我们的线性模型的截距加上斜率乘以价格加到一个大数据框架中。我们也可以用 round() 函数将这个数字四舍五入到小数点后 0 位,因为如果你考虑一下,出售一小部分 SaaS 订阅是没有多大意义的。

代码如下:

# Use coefficient and intercept data to fill in the blanks# Supply first
new_price_data$supply <- round(Supply_Zone_1_lm$coefficients[1] + (Supply_Zone_1_lm$coefficients[2] * new_price_data$Price), 0)# Demand next
new_price_data$demand <- round(Demand_Zone_2_lm$coefficients[1] + (Demand_Zone_2_lm$coefficients[2] * new_price_data$Price), 0)

最后,我们将做同样的基本减法,得到需求和供给之间的差异的 Diff 列,就像我们之前做的那样。我们也可以检查数据,以确保它是正确的。

代码如下:

# Find difference between supply and demand
new_price_data$Diff <- new_price_data$demand - new_price_data$supply# Check the data
head(new_price_data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中每个新价格的预测供应、需求和差值表的屏幕截图

总结一下,我们将再次找到最小的绝对值差,以获得价格和数量。

代码如下:

# Find row of minimum difference
min_diff_2 <- new_price_data[which.min(abs(new_price_data$Diff)),]
min_diff_2

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中预测数据的最小绝对值差异的屏幕截图

这里的结果非常相似。预测值给出了 6.02 美元的市场清算价格和 184 或 185 的均衡数量,这与真实数据非常接近。

在商业现实中,只要把价格定为 6 美元,并对结果感到满意,这就是巨大的支持。

结论

读完这三篇文章后,希望你对供给、需求和均衡在经济学意义上的含义有了更好的理解。具体到这里的均衡,我们的工作更多的是图形化的,而不是数学化的,因为我们在以前的文章中做了大量的数字运算。幸运的是,我们已经为 6 美元的市场出清价格建立了一个坚实的案例,并且很有可能销售不到 200 单位的 SaaS 产品。在现实生活中,这些数字可能会在两个方向上有所波动,但对于从个人原始数据开始的均衡分析来说,这肯定是一个现实的结果,一直到了解一项服务的整个有效运营市场。

参考

[1] R. Kabacoff, R 在行动(第二版。) (2015),纽约州谢尔特岛:曼宁出版公司。

[2] F .米什金,《货币经济学》,银行学,&《金融市场》(第 9 版。) (2010),马萨诸塞州波士顿:培生教育有限公司。

技术人员的经济学——供应(下)

原文:https://towardsdatascience.com/economics-for-tech-people-supply-part-2-600fdce12cf2?source=collection_archive---------59-----------------------

使用 R 和 ggplot2 了解需求经济学

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash科学高清摄影

欢迎来到技术人员经济学系列的第二部分!

这个项目旨在帮助人们同时学习基本的经济学概念和 R 编程。我注意到关于经济学有相当多的误解和完全错误的信息,所以这里的目标是澄清这些模糊的领域。

什么是供给?谁提供东西?供应量和供应量之间有什么区别?我应该对我的商品或服务做多少评价?怎么才能算出最大总收入?

我将引用我以前的文章技术人员的经济学——需求(第一部分)中的许多观点,所以在开始这个项目之前,请确保您已经看过了。我将把这篇文章作为一个独立的项目来写,但是随着时间的推移,这个系列将建立在它自己的基础上。

介绍

今天,我们将使用 R 编程来分析和可视化我在 Excel 文件中创建的一些真实数据,从而探索供应方面的概念。

我们将使用 10 家假设的公司来分析对我们假设的新软件即服务(SaaS)应用程序的需求,该应用程序对每个许可证收取月费。这里有各种各样的公司,从小型到大型,他们愿意以什么价格出售多少许可证。

然后,我们将检查市场供应以及打破需求弹性的概念,试图找到我们最大化总收入的地方。

在这项工作中,我在 Mac 电脑上使用 RStudio,带有 R Markdown (RMD)文件。

所有的数据和完成的 RMD 文件都可以在我的 GitHub 这里获得。

注意:如果您使用的是 Mac,请不要打开带有数字的文件。它会自动改变文件的编码,R 会不高兴的。如果发生这种情况,请删除该文件并下载一份新的 Excel 文件。

我还假设您可以设法在本地机器上设置一个 R 环境。最好将所有文件放在一个文件夹中,以简化工作流程。

我们开始吧!

代码

加载库

为了完成这个项目,我们需要 readxltidyverse 包。如果您的 R 环境中没有安装它们,只需删除代码[1]中“ install.packages… ”行前的“ # ”符号。一旦安装了它们,您就不需要在您的机器上再次安装它们。

代码如下:

# Load Libraries# If you do not have readxl or tidyverse installed, uncomment the following lines
# install.packages("readxl")
# install.packages("tidyverse")# Load Libraries
require(readxl)
require(tidyverse)

检查数据导入

有时候 Excel 文件和 R 交互的时候是有气质的,尤其是 RStudio。使用下面的代码导入数据,并检查数据是否正常。

代码如下:

# Import Data
Supply_Data <- read_excel("Supply_Data.xlsx")# Check data import
head(Supply_Data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中供应数据前六行的屏幕截图

如果您导入数据,并且价格Qs_# 不是列标签,而是数据的第一行,您可能会看到类似于 *X1 X2 X3 等内容。*作为列标题。如果发生这种情况,你可以遵循我在上一篇文章科技人的经济学——需求(第一部分)的“*设置”*部分描述的相同过程。这将向您展示如何以不同的方式导入数据,从而跟上本文。

快速测试图

做一个快速的图表总是一个好主意,只是为了让数据看起来很好,并且是合作的。它不一定要漂亮,但它可以帮助早期诊断问题。因为我们在看供给曲线,我们应该看到一个总的趋势,即根据供给定律,随着价格的增加,供给量(Qs_#)值会增加。让我们选择一家假设的公司来看看。

代码如下:

# Test plot
plot(Supply_Data$Qs_2, Supply_Data$Price, type = "l", main = "Test Plot", xlab = "Quantity", ylab = "Price")

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快速绘制其中一个数量列与价格的关系图,以便在 Mac 上检查 RStudio 中的数据

为了加分,你可以试着改变公司编号,自己制作不同公司的图表。我在这里选择了公司 2,但 1 到 10 之间的任何数字都可以,并给出不同的曲线。

绘制所有单个供应曲线

好代码的美妙之处在于它可以被快速、轻松地重用和修改。为了实现绘制所有单个供应曲线的目标,我们将在 ggplot2 [1]内的 facet_wrap() 函数内结合数据框对象类使用相同的 stack() 函数。重命名列有助于我们的理智和可读性,因为 R 会自动将列重命名为我们不希望它们被称为[1]的名称。

我们这样做是因为 ggplot2 以某种方式喜欢数据,所以我们可以获得更好的数据结构来利用它的函数,而不是试图让函数直接做一些它们不打算做的事情。

代码如下:

# Wrangle the data into a ggplot friendly structure
Wrangled_Supply_Data <- data.frame(Price = Supply_Data$Price, stack(Supply_Data[2:11]))
names(Wrangled_Supply_Data)[2] <- "Quantity"
names(Wrangled_Supply_Data)[3] <- "Qs_num"# Check the data
head(Wrangled_Supply_Data)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中 ggplot 友好结构中的前六行争论和标记供应数据

既然我们已经将数据整理成了一个合适的结构, facet_wrap() 将会更好地与我们合作。

代码如下:

# Plot the individual supply curves
ggplot(data = Wrangled_Supply_Data, aes(x = Quantity, y = Price)) +
  geom_line(color = "darkred", size = 1) +
  geom_point(color = "darkred") +
  facet_wrap(. ~ Qs_num)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中数据集中所有单个电源曲线的绘图屏幕截图

让我们思考一下,在这个市场上有许多公司提供类似的 SaaS 解决方案的背景下,这意味着什么。这 10 家公司中的每一家在每一价格下都有不同的供应量组合[2]。

根据供应定律,随着价格的上涨,供应商希望供应更多的单位[2]。直觉上这是有道理的。做生意的全部目的就是赚钱,所以以更高的价格卖出更多的产品将是任何追求利润的企业的计划。我们反映了每个公司的情况。

我们也看到,我们的公司通常只会在某个价格后才开始供货。追求利润的企业不是慈善机构,所以他们只会在对公司来说值得的时候才开始供应设备。

企业,尤其是那些在竞争市场中提供 SaaS 服务的企业,在开始销售时有一定的成本水平,并且随着时间的推移成本会增加,这就是为什么需要更高的价格来证明提供更多单位的合理性[2]。

市场供应

就像上一篇文章中的市场需求一样,市场供给是所有个体企业供给曲线的总和[2]。对于每个价格,我们将所有 10 家公司的数量加在一起,得到市场供应曲线的最终数字[2]。

代码如下:

# Create market supply
Market_Supply <- data.frame(Price = Supply_Data$Price, Market_Supply = rowSums(Supply_Data[2:11]))# Check the data
head(Market_Supply)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中的市场供应截图

绘制市场供应图

我们将继续使用 ggplot 并添加一些样式组件来可视化市场供应。

代码如下:

# Plot market supply curve
ggplot(data = Market_Supply, aes(x = Market_Supply, y = Price)) +
  geom_line(color = "darkred", size = 1) +
  geom_point(color = "darkred") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Market Supply Curve") +
  theme(plot.title = element_text(hjust = 0.5))

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中的市场供应图截图

就像第一篇文章中的市场需求曲线一样,我在曲线上看到了三个不同的区域,价格的变化以显著不同的方式改变了供应量。

这就引出了弹性的概念。

弹性

弹性的基本思想就是决定每单位价格变化时的供给量变化[3]。在关于需求的第一篇文章中,数学解释得更加详细。我们现在要做的是看看曲线的不同区域。

当供给曲线相对无弹性时,意味着单位供给量的变化小于价格的变化【3】。当供给曲线相对弹性时,单位供给量的变化大于价格的变化【3】。

这条曲线有三个不同的区域。在开始时有一个相对无弹性的区域,在过渡发生的中间部分,在较高的量处有一个相对有弹性的区域[3]。

同样,就像按需文章一样,我指定了弹性区域来简明地说明这一点。

代码如下:

# Add Elasticity zones
# 10-5.5 zone 1
# 5-4 zone 2
# 3.5-0 zone 3Market_Supply$Elasticity_Zone <- as.character(c(1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3))
Market_Supply

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域的市场供应截图

这里我最喜欢的一个小技巧是用 as.character() 函数将弹性区域指定为字符而不是数字。这将使 ggplot 与区域合作,因为它意识到它们不是用来做数学运算的数字,而是本质上是分类的[1]。

用弹性区域绘制市场供给图

我们将通过在 aes() 函数中添加 color = Elasticity_Zone 来增加之前的市场供应代码,以便 ggplot 知道为每个区域分配不同的颜色[1]。我们还将添加带有 method = “lm” 参数的 geom_smooth() 函数,使其为每个弹性区域建立线性模型[1]。

代码如下:

# Plot market supply with elasticity
ggplot(data = Market_Supply, aes(x = Market_Supply, y = Price, color = Elasticity_Zone)) +
  geom_line(size = 1) +
  geom_point() +
  geom_smooth(method = "lm") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Market Supply with Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5))

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场供应的弹性区域截图

线性模型和弹性

由于我们在关于需求的文章中研究了使用 lm() 函数的线性模型的细节,这次我们将使用使用 glm() 函数的广义线性模型来检查关于三个弹性区域的质量。

让我们看一下三个弹性区域的代码和输出,以及整个曲线的广义线性模型,以便更好地理解这个概念。

代码如下:

### Create Linear Models #### Filter Data
Zone_1_glm_data <- Market_Supply %>%
  filter(Elasticity_Zone == 1)# Create linear model
Zone_1_glm <- glm(Market_Supply ~ Price, data = Zone_1_glm_data)# Create and print summary
summary(Zone_1_glm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 1 的广义线性模型的汇总统计屏幕截图

代码如下:

# Filter Data
Zone_2_glm_data <- Market_Supply %>%
  filter(Elasticity_Zone == 2)# Create linear model
Zone_2_glm <- glm(Market_Supply ~ Price, data = Zone_2_glm_data)# Create and print summary
summary(Zone_2_glm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 2 的广义线性模型的汇总统计数据截图

代码如下:

# Filter Data
Zone_3_glm_data <- Market_Supply %>%
  filter(Elasticity_Zone == 3)# Create linear model
Zone_3_glm <- glm(Market_Supply ~ Price, data = Zone_3_glm_data)# Create and print summary
summary(Zone_3_glm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中弹性区域 3 的广义线性模型的汇总统计屏幕截图

代码如下:

# Compare against a GLM for the entire market supply# Create linear model
All_supply_glm <- glm(Market_Supply ~ Price, data = Market_Supply)# Create and print summary
summary(All_supply_glm)

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中所有市场供应的广义线性模型的汇总统计屏幕截图

我们想看看所有这些输出中的两个组成部分。

首先,价格系数的估算栏告诉我们直线的斜率。简单地说,数字越大,曲线就越没有弹性[1][3]。数字越小,曲线相对弹性越大[1][3]。当参考前三个输出时,我们对曲线[1]不同部分的供应量有很好的预测能力。**

其次,我们想看看底部的 AIC (阿凯克信息准则)值。AIC 越接近 0,我们的模型就越适合。在前三个弹性区,我们有极小的 AIC 值,表明模型与线[1]密切相关。当试图获得所有数据的线性模型时,AIC 值要高 10-15 倍。这意味着我们有一个明显更差的拟合[1]。

我们可以看到,在处理非教科书数据时,假设整个市场的弹性是多么荒谬。

代码如下:

# Look at the linear model line on the graph without looking at elasticity of different parts of the curve
# Plot market supply with elasticity
ggplot(data = Market_Supply, aes(x = Market_Supply, y = Price)) +
  geom_line(size = 1) +
  geom_point() +
  geom_smooth(method = "lm", color = "darkred") +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Linear Model of Market Supply without Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5))

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场供应数据的线性模型可视化效果不佳

最大化总收入

与我们在需求文章中得到的答案不同,从供应商的角度来看,最大化总收入就是以更高的价格销售更多的产品[3]。当我们看一看在每个价格水平上产生的总收入时,我们可以看到这一思想反映了供给定律及其预测[3]。

代码如下:

# Maximize Total Revenue
Market_Supply$Total_Revenue = Market_Supply$Price * Market_Supply$Market_Supply# Check the data
Market_Supply

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场供应数据的总收入屏幕截图

绘制总收入曲线

当可视化这些数据时,很明显,一旦我们达到供应曲线的相对弹性部分,随着我们以更高的价格销售更多的单位,总收入会显著增加[3]。

代码如下:

# Plot market supply with elasticity
ggplot(data = Market_Supply, aes(x = Price, y = Total_Revenue, color = Elasticity_Zone)) +
  geom_line(size = 1) +
  geom_point() +
  geom_vline(xintercept = 0) +
  geom_hline(yintercept = 0) +
  ggtitle("Total Revenue Curve for Market Supply with Elasticity Zones") +
  theme(plot.title = element_text(hjust = 0.5))

以下是输出结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mac 上 RStudio 中市场数据的总收入曲线截图

结论

这里的要点是,市场是由许多公司组成的[2]。这些企业都有自己的能力在整个市场内生产商品和服务[2]。由于成本和定价的诸多因素,大多数公司只有在价格足够高时才会开始生产[2]。

供应法则告诉我们,随着价格上涨,供应商将供应更多的单位。当我们根据弹性将整个市场供给曲线分解成不同的部分时,我们可以看到,在曲线相对无弹性的部分提高价格对供给量的影响很小[3]。在曲线相对更有弹性的部分,供应商愿意以相对较小的价格增长供应更多的单位[3]。

综上所述,我们发现“供应”一词有细微差别。希望在本文结束时,您能更好地理解供应方面的关键术语,以及供应商必须如何响应市场。在本系列的下一部分中,我们将根据这篇文章和上一篇关于需求的文章来看看供应和需求之间的相互作用!

参考

[1] R .卡巴科夫, R 在行动(第 2 版。) (2015),纽约州谢尔特岛:曼宁出版公司

[2] F .米什金,《货币经济学》,银行业,&《金融市场》(第 9 版。) (2010),马萨诸塞州波士顿:培生教育公司。

[3]明尼苏达大学, 5.3 供给价格弹性(未注明)https://open . lib . umn . edu/principles economics/chapter/5-3-供给价格弹性/

房屋所有权经济学深潜

原文:https://towardsdatascience.com/economics-of-home-ownership-deep-dive-427fd1b17a95?source=collection_archive---------47-----------------------

评估购房情景和相关的投资机会成本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Breno Assis 在 Unsplash 上拍摄。

注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

第一部分的经济学置业深潜。

引言。

对于那些以前考虑过或正在考虑买房的人来说,这篇文章旨在帮助你定制你的场景,并努力实现你的选择。我希望你会发现这里提供的金融模型(选择“查看原始数据”或点击下载),对你评估潜在的购房选择很有用。在这篇文章和这个模型的帮助下,你将更好地理解与房屋所有权相关的成本,以及不将首付和持续维护成本投资于其他资产(如被动市场 ETF)的内在机会成本。

鉴于我对投资的浓厚兴趣,以及我和妻子在 2018 年购买了一套房子,我最近修改了我的方法,以模拟我们的每月支出、长期储蓄计划,并预测我们将不得不分配给我们家庭投资策略的额外资金。此外,随着新冠肺炎局势的持续,这个话题很及时,因为更多的千禧一代现在正在考虑拥有自己的房子。这在很大程度上是由于许多人经历了不断发展的观点,考虑到对原地住所的要求,预计从大城市向郊区/住宅区的迁移,以及对许多家庭负担得起的东西越来越多的渴望,例如院子和更好的 WFH 办公空间。

在这篇文章中,我提供了背景和一个基于场景的模型,您可以用它来评估不同的房屋购买选项,包括可变的购买价格、首付金额和贷款条款等。基于场景的模型具有灵活的输入,允许你根据你当前的收入、月支出、个人财务状况和投资偏好进行定制。

请注意,该模型尚未考虑所有因素,例如 1)您是否应该再融资以及如何评估多个选项,2)它没有提供完整的租金与购买分析(我链接到一个有用的资源,它在房屋所有权 IRR 中考虑了净经常性成本),3)评估最常见的 15 年和 30 年固定贷款类型,但不评估其他贷款类型,例如, ARM 和 4)它没有考虑承担 PMI(低于 20%的首付)和消除 PMI,一旦贷款价值比成为<= 80%. In true product management fashion, I’ll iterate on future posts if there’s enough interest for features like this.

个人痛点和构建此基于场景的模型的原因。

虽然有许多有用的在线资源可以帮助你做出购房决定,其中一些我将在稍后分享,但我认为这篇文章的独特之处在于,它将这些分析向前推进了几个步骤,并可以根据你的决策集进行个性化。这篇文章分享了一个框架,让你在权衡投资房产还是其他潜在投资时,思考相关的机会成本。换句话说,根据你的个人假设,它将帮助你预测出你没有投入大房子的钱在市场上的回报(或你选择的其他资产);并允许你测试购买某一特定房屋与将资金投资于其他地方相比,你的情况更好/更差。

在我将根据对这篇文章的兴趣完成的后续工作中,我的计划是再次转向模式分析(这里的老例子)。在第 2 部分中,您将进一步提高您的数据科学分析和仪表板开发技能,创建一个交互式仪表板,它将您的财务模型根据您的个性化输入生成的各种场景绘制成图表。对于未来帖子,该模型将生成一个 CSV 文件,该文件可以用作交互式模式分析仪表板的平面文件数据源。

在这篇文章之后,我的其他相关文章进一步讨论了利用 Python 建立投资系统,包括:

  1. 第 1 部分:从 Yahoo!Jupyter 笔记本中的财务 API
  2. 第 2 部分:扩展第 1 部分的分析和可视化,提供获取生成的数据集所需的代码,并在 Dash by Plotly (Dash) web 应用程序中将它们可视化;
  3. 第三部分:建立在股票投资组合分析和 Dash by Plotly 方法的基础上,了解你的总股东回报(TSR),包括股息,并跟踪类似 Robo Advisor 的投资组合。

**披露:**本帖内容不应被视为投资建议。过去的表现不一定代表未来的回报。我写的是一般性的例子,并展示了如何评估家庭购买场景和将部分/全部资本分配给其他投资机会的相对机会成本。你应该向你的财务顾问提出所有与投资相关的问题,并对本文中提到的任何投资进行尽职调查。因此,我对使用本文中描述的方法可能遭受的任何损失不承担任何责任,并且在此明确否认任何此类责任。

在房屋所有权经济学上变得更聪明。

正如在简介中提到的,我的方法有四个限制(我知道):1)不评估再融资,2)没有完整的租金与购买分析,3)只关注固定利率抵押贷款(例如,15 年和 30 年)和 4)模型不考虑 PMI 情景。下面我分享解决# 1 和# 2 的资源。如果根据反馈对第四点感兴趣,那么我会考虑更新模型,加入 PMI。我的个人情况没有涉及 PMI,但这个决定是个人的,如果人们需要额外的指导,我会重新评估。

**再融资评估。**我真的很喜欢 Zillow 的所有工具,并且发现他们的再融资计算器在很高的层面上很有帮助,因为我已经评估了潜在的再融资。作为一般指导,简短的经验法则是了解你的成交成本是多少,也就是你完成再融资的费用是多少;假设这些是 2000 美元。然后看看你每月的储蓄和当前的月供;假设每月 100 美元。这意味着你需要大约 20 个月的时间(每月节省 2000 美元)才能赚回你的前期再融资成本。不用说,你应该在你的房子里呆 20 个月以上,这才开始有意义。

**租与买。**在考虑租房还是买房时,我相信 Travis Devitt 整理了一个有用的资源,这形成了我的一些想法,并帮助我更明智地考虑:链接到 Travis 的推文

**资源。**在你开始阅读本帖中的模型之前,我建议你通读下面的前两个资源,以便更好地掌握房屋所有权的经济学和途径。值得注意的是,改善职位是非常详细和有益的;我用这篇文章中的数据建立了我的模型的几个基本假设。最后一个资源展示了美国持续存在的房屋所有权差距的数据和地址。不幸的是,我不是专家,也不知道所有的答案,但我愿意为事业做出贡献,并尽我所能提供帮助/答案,以支持缩小这一差距。请随时在推特上联系我, @kevinboller ,或者给这个帖子留下回复,如果你有什么原因建议我去调查,或者有什么问题我可以帮助回答。

  1. 财富前线家居规划指南
  2. 改善——买房是一项好的投资吗?
  3. 关于美国房屋所有权差距的文章

使用基于场景的模型。

输入工作表。

当您打开模型时,您将从输入工作表开始,该工作表将驱动整个过程中的其余公式。每月模型表上的时间表提供了 10 年的预测。如果你愿意,你当然可以进一步延长,但我很难相信普通人会做出 30 年的决定,我更喜欢评估更短的时间段;这尤其是因为所有的模型都是错的,试图预测未来 30 年的模型可能比未来 10 年更错。

输入表上的 C2 单元是整个模型中最重要的单元。此表中 C 列中的所有内容也不应修改,因为输入将根据在 C2 选择的选定方案进行填充,这将从 C 列的第 1 列扩展到第 n 列。在 C 列右侧的列中,如果愿意,您可以在右侧添加更多方案,您可以根据正在评估的方案更改假设。请注意,任何蓝色字体的单元格都意味着它们可以被修改,而任何黑色字体的单元格都不应该被修改,因为它们是基于公式的,并且与场景无关。虽然提供的场景都是积极的情况,例如,3.2%的房屋升值,你当然可以用多种不同的方式评估同一场景。例如,也许你想比较 3.2%的年房屋升值和 7%的年投资回报与 0%的房屋升值和 4%的投资增长的基本情况,以查看随着时间的推移对你的调整后净值的影响。

**要点:**始终要认识到,当您对场景 1-4 进行任何调整时,您应该始终返回并循环通过单元 C2 中的场景—将 1、2、3、4 输入到 C2,以便循环通过这些场景,并让它们的输入流过模型;一旦你习惯了剩下的工作表,这一点就会变得很明显。

如果你读过上面提到的参考资料,那么购房 细节贷款细节部分应该很简单。在 D-G 列中,我包含了 4 个模板化的场景。收入费用具有占位符值,应进行调整以反映您的个人收入和费用。我会输入税后收入数字,这样你就能更好地估算出扣除每月支出后的现金流;以及在支付这些费用后你可以用来投资的资本。对于 HOA 之后的剩余支出,比如房屋维护,我建议保持原样,因为它们是基于《改善邮报》的数据。同样的建议适用于房屋销售输入假设,包括销售和成交成本。

对于的投资表现,投资%的超额现金意味着,对于你在支付每月费用后保留的钱,你会将其中的多少投资于被动型 ETF、股票等。然后你必须估算一下你的名义回报率,我把它定为 7%。你可以选择比这更积极/更不积极。你的可用现金储备,你可能不需要,是在你需要更多现金来支持某个月的支出(支出超过收入)时留出的钱;如果你的月支出超过收入,但你在一年中管理现金流,预计有更多的现金流入,例如,RSU 每年两次授权,你可能会这样做;但这不一定是明智的,也不可能适用于大多数人。

净值输入,最后一部分,你将如何直接比较你的家庭投资和其他投资,以查看对你的净值的影响。同样,每年 3.2%的房屋升值是一个改善后的假设。首付机会成本是指,在你支付的首付比基础方案(总是在 D 列有基础)多的情况下,我们将扣除这笔资本如果投资在其他地方将会得到的回报(而不是用于更大的首付)。由于额外的首付优势反映在你购买更大的房子和/或支付更多预付款的情况下的房屋价值回报中,这将显示你相对于基础的净回报。在比较具有更高前期房屋成本的场景时,它还应该对所有场景进行比较。

月度模型工作表。

在 C1 单元格中,您将看到基于您在输入工作表中输入到 C2 的方案进行评估的当前方案。该模型显示了 10 年间的月度细分,并将这些细分累计到这 10 年的年度总计。第 37 行显示的是税前净营业利润,这是你的税后收入,并扣除你的每月开支。虽然我建议输入税后收入,但电子表格不能说明你的实际纳税情况;因此,我称之为税前,因为当你申报/纳税时,会发生进一步的调整。下面是你的债务偿还额(第 45-49 行)和一个时间表,其中列出了将投资的多余现金、这些投资的预计回报以及将随着时间推移而积累的现金储备(未投资的资金)。

你会在第 65-67 行看到你的可投资现金随着时间的积累。对于相关的较高成本场景,通过购买较小的房屋/支付较少的首付款,你本可以获得回报的机会成本也会以同样的方式随着时间的推移而增值。值得注意的是,这种模型中的投资回报提供了一个简化的、线性的视角,来观察你的资金随时间的增长。没有一项投资会以你的年预期回报率除以 12 个月来线性增长;此外,由于这是一种美元成本平均法,即当你每月有可用资本时进行投资,你的实际回报将比简化的模型框架表现出更大的波动性。无论如何,你不应该陷入月度回报,并认识到 1)平均而言,你的可投资资产(住房和 ETF 等)每年都会升值,2)这个模型旨在帮助你采取更长远的观点。理想情况下,考虑到交易和结算成本中的摩擦,在决定搬家/购买不同的房子之前,你会给自己留有 5 到 10 年的时间。

一段时间内的净值首先评估房屋净值的增长。这是由每年房屋升值的投入(根据投入的每月增长率进行调整)和基于抵押贷款条款的债务偿还所驱动的。为了最终确定净值计算,扣除了超出基本方案的额外首付款,增加了投资增长,您可以手动输入您想要的任何额外资产和负债。我个人的模型时间表比这个更详细,包括退休资产(Roth,401k 等。).准备好之后,如果你想了解你的净资产的完整情况,以及这些账户的预计贡献和随时间的相关增长,你应该考虑将这些构建到你的模型中。

虽然房屋净值随着时间的推移而增长,增加了你的总净值,但《改善》这篇文章很好地强调了“计算投资回报的问题”。为了简洁起见,除了房屋升值之外,还有三个核心驱动因素会影响你的房屋投资回报:1)交易成本,2)现金流,包括持续成本(注意,这些都反映在我们的模型中,见投入工作表中的第 49 行),以及杠杆,又称抵押贷款,增加了上行收益,但也增加了下行风险。因此,为了进行真正的比较,在图表和经常性成本+ IRR 工作表中,我们将看到您需要如何扣除估计的交易成本,以反映您的真实净值和您的住宅投资的预计 IRR。

图表工作表。

在图表工作表上,我们比较了前 5 年期间跨场景的一些核心指标。如果您对开发和扩展模型有所了解,那么将这一时间延长到 10 年或更长时间(如果您进一步扩展模型的话)应该很简单。

在第一张图中,我们比较了不同情景下的预计净营业利润(NOP,收入减去费用)。在这种情况下,您可以看到场景 1 中的 NOP 最大,场景 4 中的 NOP 次之。在场景 4 中,您选择支付与场景 1 相同的房屋,但是您选择了 15 年期抵押贷款而不是 30 年期抵押贷款。每个人都有自己的看法,但我赞同里克·埃德尔曼的 30 年抵押贷款理论——我更喜欢更大的流动性和多样化。使用这些情景,您可以在情景 2 中看到,您将拥有情景 1 中大约 70%的 NOP,在情景 3 中,您将拥有情景 1 中大约 35%的 NOP(在这种情景中,您购买的房屋价格是情景 1 的 3 倍)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NOP,跨场景税前对比。

在第二个图表中,转到单元格 K101,该图表显示了所选方案的投资详细信息,下表对这些方案进行了细分。给定回报的线性度和关于投资多少(80%)的相同假设,您将看到您的总投资余额+方案 1 之后的超额现金将反映方案之间的 NOP 差异。您可以决定是否要修改方案的假设;例如,如果你买了一个较小的房子,也许你会将更多的资金用于投资(90%?)和/或更积极地进行其他投资,期望回报率高于 7%。

在第三张图中,转到 J160,你会在第二个 y 轴上看到你一段时间内的净值和债务偿还额。对于前三种情况,现有贷款余额占原始抵押贷款的百分比,以及房屋净值占房屋估价的比例相对一致。唯一的区别是,我已经假设了更大的房屋购买量/更大的借款额会有更高的利率。你还会看到,在情景 1 中,你的房屋净值反映了你净资产的 30%,在情景 2 和 3 中增加到约 60%和 90%+,在情景 4 中达到 40%(其中你选择了 15 年的抵押贷款;高于给定的场景 1)。虽然你可能会在第 O 列(单元格 0160)中得出结论,你对各种情景都不感兴趣,你的净值也相对相同,但这并不完全正确。在扣除预计结算成本(见 U161)后,预计结算成本估计了你出售房屋可获得的净实现价值,你会看到,5 年后,情景 2 和 3 实际上落后于情景 1 的调整后净值;而在场景 1 和场景 4 中,你实际上处于相同的位置(相同的购买,不同的抵押期限)。情景 1 和情景 4 之间的紧密联系表明,根据你的投资机会集,你相对不愿意在你的房子(期限较短的抵押贷款)上投资更多,而不是在多样化的 ETF 上投资更多(假设 7%的年化回报率)——税收后果,如抵押贷款利息的扣除或股息税,没有被考虑到这个框架中,但可能会影响这个比较。关于如何评估你的潜在房屋投资回报的最终细节,我们将进入最后一张工作表。

经常性成本+ IRR 工作表。

如前所述,改善的文章是很详细的,非常有助于变得更加了解房屋所有权的机制和含义。然而,读完这篇文章后,你仍然没有办法根据你的个人情况或决策来定制学习内容。鉴于我同意作者的退货方法,我在最后一张工作表中重新创建了那篇文章中的两个表。好处是你可以调整场景和输入,它们将基于与文章相同的结构流过这些表。

在房屋所有权年度经常性成本表中,列出了如何计算您正在评估的特定场景的净年度经常性成本(租金与购买成本)。关于这方面的详细信息,请参见《改善邮报》中的《房屋所有权的持续成本》。由于这可能会引起问题,我将指出我的帖子中的模型和改善的表格之间的差异。在增值表中,每年的财产税随着房屋价值的增长而增长,房主的保险随着通货膨胀而增长。虽然这更准确,但在模型的 10 年预测中,我让每个场景的满载每月抵押贷款付款(包括财产税和保险)保持不变。这是为了减少我们所覆盖的认知超载,并使其更容易理解相对于在线抵押计算器和估计付款的模型。由于我没有随着时间的推移适度增加财产税和保险,这意味着房屋所有权的回报被稍微夸大了;然而,由于这在不同的场景中是一样的,我相信这对你的评估没有实质性的影响。为了强调这种微小的差异,你会注意到在《改善邮报》的年度经常性房屋拥有成本表中,10 年后,年度财产税和购买 25 万美元房屋的房屋保险成本分别只增加了约 500 美元和 200 美元。

我还展示了两个 IRR 时间表,一个是五年投资期,另一个是十年投资期。你会注意到情景 4 的 IRR 最高,在情景 4 中,你支付的首付最低(与情景 1 相同),而且由于你有 15 年期而不是 30 年期的抵押贷款,你支付贷款的速度更快。在这种情况下,虽然情景 4 中的净年度经常性成本比情景 1 中的高,但是通过支付更多的债务本金所产生的更大的股权价值推动了更高的 IRR。当你能够从房屋升值中获益时,这展示了房屋所有权杠杆化回报的好处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

场景 1:5 年和 10 年持有期的房屋销售的现金流和内部收益率。

然而,我已经简化了年度经常性成本表中的一些内容,例如年度租金节省假设。对于您的所有个性化场景,节省的年租金应该是相同的(请随意在您自己的评估中反映这一点),但鉴于我假设不支付抵押贷款,在场景 4 和其他成本更高的场景中,节省的租金实际上更高。我需要考虑这是否可以用不同的方式表达,但结果是场景 4 的 IRR 可能被夸大了。现在,我将这些表作为跨场景的回报概况的概括说明。如果您愿意,可以很容易地覆盖第一个表格中关于经常性成本+ IRR 的 H 列和 I 列中的公式。你可以只输入你特定的房租储蓄和租房者保险储蓄,然后按通货膨胀率增长。

正如预期的那样,情景 2 和情景 3 的 IRR 比情景 1 略低,因为你看到了与情景 1 相同的价格升值,由于更大的利息成本,债务偿还略慢,并且由于更高的抵押贷款支付,你的净年度经常性成本更高。最后,与增值文章类似,你会发现,在更长的持有期内(10 年对 5 年),回报会有所提高,因为从购买房屋中收回前期交易成本需要时间。

我最后要指出的是,这个模型并没有对你的全部资产进行整体回报分析;在最终的工作表上,房屋所有权内部收益率是独立完成的。我在这里的建议是,少关注回报,而是关注产生最高调整后净值的结果,同时平衡你愿意为实现这一调整后净值而承担的风险。这是一个更复杂的话题,如果有相关的反馈和问题,我会考虑跟进。

结论。

总结这篇文章,我希望你能发现这个框架在评估你的个人机会方面是有用的,包括潜在的购买房屋,相关的购买价格和关键变量,如首付比例,抵押贷款利率和贷款期限。虽然我已经指出了一些非常有帮助的资源,我发现这些资源可以更好地理解房屋所有权的经济学,但我还没有找到另一种资源,它 1)个性化每月现金流,2)预测你随着时间推移积累的净值,包括房屋净值,以及 3)提供定制的时间表来评估潜在的投资回报、机会成本和你的房屋的潜在 IRR。

这一模型中的情景基本上得出与改善后的情景相似的结论。平均需要 4-5 年才能收回你的平仓成本,一套房子可能是一项合理的投资,甚至表现出与整个股市 ETF 相当的回报率(如 Vanguard 的 VTI )。这种情况并不总是如此,而《改善》这篇文章很好地指出了哪里可能会出错。

结合我所链接的资源,现在你有了一个可定制的模型,可以评估你在住房和投资机会方面的决策,你应该会感到完全知情,你会做出一个经过充分研究的决定,睁大眼睛进入房屋所有权阶段。这样做,我相信拥有一个家可以是一个伟大的地方;你会很好地理解它是如何融入你的整体个人财务状况以及你的预测投资和退休策略的。

如果你喜欢这篇文章,如果你点击“拍手”图标(不止一次)会很棒!)让我了解并帮助增加我作品的发行量。如果您想在后续帖子中对任何建议的编辑、功能请求或兴趣发表评论,也请让我知道。

你也可以在推特上联系我, @kevinboller ,我的个人博客可以在这里找到。感谢阅读!

EDA(探索性数据分析)——获得更多的数据洞察

原文:https://towardsdatascience.com/eda-exploratory-data-analysis-to-get-more-insight-into-the-data-b2fb74dabb82?source=collection_archive---------25-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

目录

  1. 介绍
  2. 图书馆
  3. 可视化的重要性
  4. 编码部分
  5. 结论

介绍

当我刚刚开始机器学习之旅时,我遇到了许多机器学习教程书籍、视频和课程。这教会了我不同类型的机器学习算法以及它们是如何工作的。所以,在完成这些教程后,我想我现在知道机器学习了。因此,我试图做一些简单的项目,但结果是不同的,就像我没有得到我期望的模型的准确性,我不知道哪里出错了。因此,我在互联网上搜索,寻找提高模型精度的方法,当然,我找到了很多方法,但我认为我错过的最重要的部分是对我的数据执行 EDA。

在我看来,对数据进行 EDA 就像在购买任何笔记本电脑、手机或平板电脑之前观看评论和拆箱视频,或者在购买汽车之前观看汽车评论者的视频,以了解更多关于我们将要购买的产品的信息。所以,现在我想你应该已经知道我们为什么要进行 EDA 了。在使用数据训练模型之前,我们将获得关于数据的见解。

我们这里要用的数据集是葡萄酒质量数据集。该数据集包含 12 个特征,即固定酸度、挥发性酸度、柠檬酸、残糖、氯化物、游离二氧化硫、总二氧化硫、密度、pH、硫酸盐、酒精和质量。在这些特征之外,我们需要预测代表葡萄酒质量的质量特征。

图书馆

Python 有大量的库,让我们在执行这些任务时更加舒适。为了对数据执行 EDA,我们将使用以下库:

Pandas 构建在 Numpy 之上,Numpy 用于处理和操作数据集。

Numpy 用于对数据执行数学运算,并处理多维数组和矩阵。

Matplotlib 基本上是一个绘图库,允许我们可视化我们的数据,以便我们可以获得更多关于它的见解。

Seaborn 也是一个构建在 matplotlib 之上的绘图库,允许创建有吸引力的绘图。

可视化的重要性

众所周知,为了更好地学习,我们需要将它形象化。你越能想象它,你对它就越有洞察力。因为我们的最终目标是更多地了解数据,所以我们尝试将数据可视化。它还帮助非技术人员更深入地了解数据。

因此,如果我们使用绘图、图表和其他可视化工具来可视化数据,而不是查看行和列形式的实际数据,那么我们就可以轻松地获得有关数据的更多信息。

有几种类型的图可用,但我们在这里只使用其中的几种。具体如下:

  • 计数图
  • 热图
  • 箱线图
  • 距离图
  • 配对图

除了这些,我们还有小提琴情节,群体情节,联合情节等。为此我们将只讨论它的用法。但是这里我们将只使用这些列出的图。

让我们开始编码部分

在这一节中,我们实际上将使用我前面提到的库在给定的数据集上执行 EDA。那么,让我们开始吧。

导入库

我们将导入所有必需的库。

导入数据集

我们将使用 pandas 的 read_csv()函数导入数据集。因为我们的数据集使用“;”作为分隔符,我们将把它指定为方法的一个参数。

df.sample(5)将显示数据集的随机 5 个样本。这样我们就可以知道什么类型的特性和它们的价值。

上述代码的输出如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

描述数据集

pandas 的 describe()方法显示数据集的所有统计值,如计数、平均值、标准差、最小值、最大值等。分别是。

上述代码的输出如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

要查看数据集中的所有列,我们可以使用 pandas 的以下方法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

检查缺失值

我们有几种方法来处理缺失值,但为此,我们需要知道有多少要素有缺失值。为了检查缺失值,pandas 有一个名为 isnull()的方法。我们将汇总要素的所有缺失值,以便了解有多少要素有缺失值以及有多少缺失值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

因此,正如我们可以看到的,我们的数据集中没有任何缺失值,因此我们可以继续。

各列之间的相关性

找到所有特征之间的相关性有助于丢弃高度相关的特征。使用热图,我们可以看到所有功能之间的相关性,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

正如我们在热图中看到的,高度相关的要素以较浅的颜色显示,而负相关的要素以较深的颜色显示。我们可以在热图中看到,特征密度残糖高度相关,因此我们可以删除其中一个,我们还可以看到游离二氧化硫总二氧化硫也高度相关,因此我们也可以删除其中一个。因为添加这两个特征不会产生任何新信息。

检查葡萄酒质量数据的分布

在这里,我们检查葡萄酒质量值范围的频率。通过这样做,我们可以了解数据集是如何分布的。因此,如果需要,我们可以决定重采样的策略。

我们创建计数图如下:

这样做的结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从计数图中我们可以看到,质量为 6 的数据较多,质量为 3 和 9 的数据很少。

使用箱线图检测异常值

我们可以使用箱线图来绘制数据,以检测数据中的异常值,并了解我们的数据是否有偏差。

箱形图只是一个简单的矩形方框,显示最小值、最大值、中间值、第一和第三四分位数(分别为 25%和 75%)。使用方框外的圆圈显示异常值。如果中位数不在方框的中间,则数据是偏斜的。如果中位数接近顶部,则数据是正偏的,如果接近底部,则数据是负偏的。

我们可以创建如下的箱形图:

该数据集的箱线图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

估计每个特征的 PDF

我们可以使用 dist plot 获得关于每个特征遵循的 PDF 的信息,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从图中可以看出 pH 服从正态分布。

探索所有特性之间的关系

为了探究所有特征之间的关系,我们可以使用配对图。它可以按如下方式创建:

葡萄酒质量白色数据集的配对图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

结论

所以最后,我们在文章的最后。当然,EDA 中的内容远不止我在这里介绍的内容。总结 EDA,我们可以说,在你用它来训练你的模型之前,了解你的数据真的很有帮助。

你可以在我的 Github repo 中找到我的笔记本和数据集。

不要犹豫,在下面的评论区说出你的想法。

如果你觉得这篇文章有用,请分享。

感谢您阅读这篇文章。

参考资料:

[## 使用 Seaborn 进行探索性数据分析

由 Coursera 项目网提供。制作可视化是探索和分析的重要的第一步…

www.coursera.org](https://www.coursera.org/projects/exploratory-data-analysis-seaborn) [## 什么是探索性数据分析?

当我在考虑我应该开始写博客的第一个话题是什么的时候,EDA 突然出现了…

towardsdatascience.com](/exploratory-data-analysis-8fc1cb20fd15)

查看我的其他文章:

[## 使用 flask 部署机器学习模型

作为机器学习的初学者,任何人都可能很容易获得足够的关于所有算法的资源…

towardsdatascience.com](/deploy-a-machine-learning-model-using-flask-da580f84e60c) [## 使用 MoviePy 在 Python 中创建自己的基本视频编辑软件

伟大的图书馆创建自己的视频编辑软件

medium.com](https://medium.com/analytics-vidhya/create-your-own-basic-video-editing-software-in-python-using-moviepy-fcb229153f5c) [## 不使用 scikit-Learn 使用 Python 实现简单线性回归

使用基本库的分步教程

medium.com](https://medium.com/better-programming/simple-linear-regression-using-only-python-5c86af200bca) [## 用 Python 编写你自己的基于流行度的推荐系统,不需要库

推荐系统现在无处不在,像亚马逊、网飞和 Airbnb。所以,那可能会让你…

medium.com](https://medium.com/hackernoon/popularity-based-song-recommendation-system-without-any-library-in-python-12a4fbfd825e)

EDA:特征工程和分类数据编码

原文:https://towardsdatascience.com/eda-feature-engineering-and-encoding-categorical-data-75bed7af8692?source=collection_archive---------33-----------------------

初学者回归技巧

房地产预测的回归技术——第二部分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我从我认识的最好的房地产经纪人那里偷了这张照片:我的妈妈!妈妈,生日快乐!

上周 ,我们开始了回归技术系列,使用散点图和条形图探索了爱荷华州艾姆斯的房地产数据集。这些技术是为了在我们的数据中建立关于模式的基本直觉。绘制我们的数据也允许我们筛选并了解我们正在处理的变量。在这个数据集中,有 79 个不同的变量用于预测房屋销售价格。太多了!

然后,我们总结了一些评估和填充缺失数据的方法。如果你想阅读全文,你可以在这里找到

现在,把上周的 Jupyter 笔记本装上,让我们开始吧!你可以在这里找到我的 完整的笔记本 ,但是像上次一样,我鼓励你在本教程中发展你自己的。

在我们开始之前,请确保您已经完成了我们的第一个练习:


练习 1:** 如果您还没有,请使用上周概述的技术填写数据集中任何缺失的数据。然后你就可以开始钻研特性工程了。 **** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *****

特征工程

特征工程背后的理念是首先发现数据中可能驱动预测变量的模式,然后将其带到表面。这个由两部分组成的过程从探索我们的直觉开始。

什么赋予了家庭价值?

这是我的候选名单:

  1. 尺寸。我说的是总的可用内部空间。
  2. 房子坐落在多大的地产上?我喜欢园艺!
  3. 它有像棚子这样的外部结构吗?
  4. 游泳池怎么样?

请注意,其中一些问题有“是”或“否”的答案,回答“是”的简单行为会在您的脑海中推动销售价格上涨。当涉及到机器学习时,这并不一定有什么不同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

罗伯特·尼克森在 Unsplash 上的照片

现在想象一个机器学习算法,它只能根据它所拥有的数据来回答问题。如果我们查看我们的数据字典,我们只看到两个与家庭泳池相关的变量:

  1. PoolArea —以平方英尺为单位的面积。
  2. 泳池质量控制 —泳池质量。

一个人可以从一个给定的具有“极好”游泳池质量的家跳到“这个家必须有一个游泳池”。但是,不能保证您的算法或模型能够做到。因此,我们必须 通过特征工程将这种模式带到表面上来。

是写代码的时候了!我假设您已经准备好笔记本,并加载了数据集。

*df['HasPool'] = df.PoolArea.apply(**lambda** x: 1 **if** x > 0 **else** 0)*

这一行代码将特性 HasPool 添加到您的 Pandas 数据框中。

想知道一个家有没有大棚子怎么办?我想知道我潜在的新房子有没有网球场怎么办?好吧,我不想知道,但是有人想知道。让我们再来看看我们最好的朋友,数据字典。我看到一个名为mischaracter的变量,它有以下可能值:

 *Elev	Elevator
       Gar2	2nd Garage (if not described in garage section)
       Othr	Other
       Shed	Shed (over 100 SF)
       TenC	Tennis Court
       NA	None*

嗯,那很简单。我们现在可以提取几个可能会或不会影响房屋价值的特征:

*df['HasShed'] = 
    f.MiscFeature.apply(**lambda** x: 1 **if** x == 'Shed' **else** 0)
df['HasTennis'] = 
    df.MiscFeature.apply(**lambda** x: 1 **if** x == 'TenC' **else** 0)
df['HasGar2'] = 
    df.MiscFeature.apply(**lambda** x: 1 **if** x == 'Gar2' **else** 0)*

请记住,您在训练集中设计的任何变量也需要在测试集中创建。


练习二:** 回答问题“房子有多少地上居住面积?”有描述这个量的变量吗?如果没有,使用你所拥有的数据和上面的技术,找出如何设计一个变量。*

处理特征工程的另一种方法是“试着用不同的方式说同样的事情”。你可以把现有的信息分成更小的部分。想象一下,向不理解的人更详细地解释一个概念。或者,您可以组合现有的变量,这类似于用更宽泛的笔画来解释一个概念。

在我们离开特性工程之前,我只想说:不要相信你的直觉。直觉通常是由经验和实验建立起来的。当直觉由于缺乏经验而失效时,研究是一个很好的替代品。例如,我不知道一个完工的地下室每平方英尺增加的价值比一个地上房间少。

编码分类数据

在我们能够从数据中获得任何统计见解之前,我们需要将其全部编码成数字格式。这将允许我们对我们的数据进行计算。为了获得如何做到这一点的直觉,我们需要考虑有两种类型的分类变量:序数和名词性。

***序数:*序数变量的可能值是不连续的,但有一个潜在的等级结构。序数变量的一个例子是将大学生分为四类:大一、大二、大三或大四。这些离散的类别有一个潜在的顺序。

***名义上的:*名义上的变量是没有明显的潜在等级或顺序的变量。颜色就是一个很好的例子。红色’,‘蓝色’,‘绿色’也可以列为’蓝色’,‘绿色’,‘红色’,因为它们没有内在属性来给它们排名。

当我们想要将分类数据转换成数字时,定义这两个类别是很重要的。如果我们的类别是有序的,我们必须提供一个方法来保持底层的等级结构。


练习 3:** 将您的分类数据排序到 2 个列表中,如下所示:*

*ordinal = ['ExterQual', 'BsmtQual', 'GarageQual', 
           'KitchenQual', 'FireplaceQu', 'PoolQC',  
           'OverallQual', 'ExterCond', ... ]nominal = ['Neighborhood', 'MSZoning', 'Condition1', 
           'Condition2', 'RoofStyle', ... ]*

一旦我们把序数/排序数据分开,我们必须弄清楚它到底是如何排序的。同样,我们必须参考我们的数据字典来做到这一点。如果你还没有注意到,数据字典是一个必要的工具,你应该随时打开。例如,让我们以变量 BsmtExposure:

*BsmtExposure: Refers to walkout or garden level walls (split levels or foyers typically score average or above) Gd	Good Exposure
       Av	Average Exposure 	
       Mn	Mimimum Exposure
       No	No Exposure
       NA	No Basement*

这个变量描述了地下室暴露在外面的程度。许多错层住宅都有带家具的地下室,有外部通道和露台或门廊。这被认为是“良好的暴露”,我们在对变量进行编码时必须考虑到这一点。

可能有许多方法可以将序数数据编码成数字,但我喜欢使用字典或映射。

*BsmtExposure_map = {
    'Gd':4,
    'Av':3,
    'Mn':2,
    'No':1,
    'NA':0
}df.BsmtExposure = df.BsmtExposure.map(BsmtExposure_map)*

注意熊猫的用法。Series.map 转换我们的变量,秩保持不变。

*同样,我们可以用变量 **Functional,*做同样的事情,它描述了房子的任何主要损坏或其他问题。值的范围从 SalTyp ,其中 Sal 表示房屋经历了灾难性的破坏,无法居住。 Typ 表示正常磨损。

*Functional_map = {
    'Sal': 0,
    'Sev': 1,
    'Maj2': 3,
    'Maj1': 4,
    'Mod': 5,
    'Min2': 6,
    'Min1': 7,
    'Typ': 8
}df.Functional = df.Functional.map(Functional_map)*

练习 3:** 用和上面两个例子一样的方式转换你所有的序数变量。*请记住,您的训练集和测试集都需要这样做。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ****

好吧,每个人都喜欢相关矩阵的热图。我和其他人一样内疚,我为花了太多时间选择完美的彩色地图来搭配我笔记本的其他部分而内疚。因此,下面是我们在下一篇文章中将要做的一个例子(在我们讨论了为什么我们不能相信漂亮的脸蛋…或热图之后):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将把我们带到统计测试…如果第一次约会是一个热图,那么进行统计测试就是深入挖掘,以发现你的新迷恋对象的内在是否像她的外在一样美丽。

在此之前,请随时留下您的任何问题、评论或更正!

使用探索性数据分析解读移动应用用户行为

原文:https://towardsdatascience.com/eda-how-to-on-app-behavior-data-77fde7384a70?source=collection_archive---------50-----------------------

关于使用移动应用程序数据进行探索性数据分析的方法和思维过程的分步走查

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Unsplash 的 Img 通过链接

在本文中,我将解释关于如何使用移动应用程序行为数据执行探索性数据分析(EDA)的方法和思维过程。EDA 是任何机器学习建模之前的关键步骤。

你期望学习的是**如何从零开始,通过分析未清理的原始数据,挖掘出有趣的数据模式。**它被分成 4 部分。

  1. 数据审查
  2. 数据可视化
  3. 相关分析
  4. 摘要

现在让我们开始吧🏃‍♂️🏃‍♀️.

  1. 数据回顾

获得原始数据后,第一步是理解每一列。

图 1 显示了原始数据的一个片段。有五万条记录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1 原始数据片段

表 1 是所有列的简要总结。很快,你会发现这些数据包括应用程序安装的日期和时间,以及用户使用的功能。应用程序行为包括关于用户查看的应用程序屏幕列表的数据,用户是否玩过金融迷你游戏以及用户是否喜欢任何功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 1 列说明摘要

第二步是以稳健的方式审查数据分布,重点是数字变量。具体来说,使用

dataset.describe()

图 2 有助于快速了解每个数值变量的最小值、最大值和平均值。有趣的是,用户的平均年龄是 31.7 岁,用户玩的平均屏幕数是 21。11%的用户玩过迷你游戏,17%的用户使用了高级功能,62%的用户最终注册成为会员。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2 列分布汇总

第三步是检查每个变量的数据类型,并在必要时进行类型转换。

具体来说,

dataset.info()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3 可变数据类型概述

我们发现列小时被当作一个字符串,如图 3 所示。因此,让我们只对小时进行切片,并转换为 int 类型。

dataset[“hour”] = dataset.hour.str.slice(1, 3).astype(int)

2.数据可视化

作为一名数据科学家,不仅要展示模型,还要直观地展示和解释发现。可视化是不可避免的一步。

具体来说,

dataset2 = dataset.copy().drop(columns = [‘user’, ‘screen_list’, ‘enrolled_date’, ‘first_open’, ‘enrolled’])
f = plt.figure(figsize=(15,6))
for i in range(1, dataset2.shape[1] + 1):
    plt.subplot(2, 4, i)
    f = plt.gca()
    vals = np.size(dataset2.iloc[:, i — 1].unique())
    plt.hist(dataset2.iloc[:, i — 1], bins=vals, color=’#3F5D7D’)

上面,我们将直方图仓的数量设置为等于每列中唯一值的数量。

如图 4 所示,可以看到一些有趣的模式。例如,年龄分布是正偏的,在 30 岁左右有一个很强的峰值。大多数用户不玩迷你游戏,使用高级功能,喜欢任何功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4 数值变量直方图

3.相关性分析

显然,上面的可视化只是关于单个变量的分布。但是我们需要知道每个变量是如何相互关联的。

3.1 自变量和因变量之间

第一步是理解自变量和因变量之间的相关性。自变量是列’'登记的【T1 ',自变量是所有其他列。所以,具体来说,

dataset2.corrwith(dataset.enrolled).plot.bar(figsize=(15, 6),title = ‘Correlation with Reposnse variable’, fontsize = 15, rot = 15,grid = True)

图 5 显示了相关图。同样,一些有趣的发现。例如,屏幕数量与用户注册之间存在较强的正相关关系。总体而言,自变量和因变量之间没有很强的相关性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5 自变量和因变量之间的相关条形图

3.2 自变量之间

第二步是理解独立变量之间的相关性。这有助于选择独立的特征,因为我们只训练具有独立变量的模型。所以我们需要确保变量之间没有很强的相关性。具体来说,

corr = dataset2.corr()

图 6 说明了相关矩阵。注意,我们只显示了下面的三角形,因为整个矩阵是对称的。由于最大相关性接近 0.3,我们可以得出结论,数值变量彼此不相关。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6 自变量之间的相关图

4.总结

使用一个小应用程序的行为数据,我们进行了数据审查,数据可视化和相关性分析。幸运的是,这些数据不需要太多的手工和琐碎的工作。但是我们发现了一些有趣的模式,可以作为你主菜前的开胃菜。

太好了!如果你觉得这篇文章有帮助,请随意点击👏s!如果您需要源代码,请随时访问我的Github页面🤞🤞。下一篇文章将介绍特征工程、数据处理和模型构建

使用 SmartEDA 开发的 EDA

原文:https://towardsdatascience.com/eda-in-r-with-smarteda-eae12f2c6094?source=collection_archive---------39-----------------------

最少的代码和全面的探索性数据分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Rosan HarmensUnsplash 拍摄的照片

在从事数据科学或机器学习项目或任务时,我们都有快进到模型构建和预测阶段的冲动。然而,正如我们的导师和专家重申的那样,初始探索性数据分析(EDA)阶段对于从训练模型和预测的后期阶段获得更好的结果至关重要。估计花费在 EDA 和数据准备上的时间占数据科学项目总时间的 60–80%。

考虑到这一点,R 中有没有一些包可以让我们在加速 EDA 的同时还能做好它的工作?嗯,看起来有!

在本文中,我将展示 R 包 SmartEDA 的功能,它让我们在 EDA 领域的生活变得更加轻松。使用 **SmartEDA、**中的方法,只需一行代码,我们就可以获得以下各项:

  • 更丰富的信息
  • 可读性更好的格式化输出
  • 日期集中每个要素的多点综合摘要
  • 可视化单变量和双变量分析

SmartEDA 的所有上述功能都非常方便,尤其是在处理具有大量功能的数据集时。尝试使用传统的**str()****summary()**函数来处理超过 10 个特征的数据集!

现在让我们试驾一下 SmartEDA…

我们将使用来自 Kaggle 的泰坦尼克号数据集。你可以从这里下载。这包含了命运多舛的泰坦尼克号乘客的数据,以及他们是否在灾难中幸存。

#install.packages("SmartEDA")
library(SmartEDA)
data = read.csv("titanic.csv")

以下是数据集前几行的示例。

head(data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集包含乘客信息,包括旅行等级、姓名、性别、年龄、船上兄弟姐妹和配偶的数量、船上父母和子女的数量、票价和出发港口等。

ExpData()方法给出了关于数据集的顶级元数据信息。

ExpData(data, type=1)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用type = 2参数的相同方法给出了数据集中每个要素的简洁摘要,包括每个要素的变量类型、缺失案例百分比和唯一值数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

厉害!对吗?等待…越来越好了。

连续特征总结

**ExpNumStat()** 方法生成数据集中所有连续要素的多点综合统计摘要,其中包含大量信息,包括负值、零值和正值的数量、缺失值的数量以及百分比、最小值、最大值、平均值、中值、标准差、变异系数、IQR、偏斜度、峰度和异常值的数量…咻!!

另外,**ExpNumStat()**会自动识别数据集中的连续要素。在这里,下面我们只选取了可用于输出的所有概要点的一个子集。您可以通过删除列索引号来查看完整的输出,并只为您感兴趣的统计信息指定列索引。

ExpNumStat(data,by ="A",Outlier=TRUE,round= 2)[,c(1,2,4:6,9:10,12:15,18,23)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ExpNumStat(data, by = "A", Outlier = TRUE, round = 2)[,c(1,2,9,16:22)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,将by参数设置为 G 或 GA,我们可以通过在 group 参数中指定一个分类特性来获得按“group”和“group plus all”划分的摘要。这在分类问题中特别有用,就像我们在这里遇到的问题,我们可以获得分类响应变量每个级别的连续特征的汇总(在这个数据集中为“幸存”)。

ExpNumStat(data[,-1],by = "GA",Outlier=TRUE,round= 2,gp = "Survived")[,c(1,2,4:6,9:10,12:15,18,23)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这种情况下,我们可以清楚地看到,票价特征对乘客是否幸存起着很大的作用。

分类特征总结

分类特征总结呢?这里使用的是**ExpCatStat()** 方法。

ExpCatStat(data, Target = "Survived")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的单行代码不仅提供了每个分类特征和目标特征之间的卡方统计和 p 值,还提供了每个特征的信息值(IV ),以及它与目标特征的关联程度和它的预测能力的有用标签。说到超越使命召唤!!

可视化

有了**SmartEDA**、**、**就不全是数字输出了。无论是通过**ExpNumViz****ExpCatViz**方法进行单变量或双变量分析,它都可以提供可视化的探索数据。

双变量分析:连续特征对之间

scatter = TRUE参数传递给ExpNumViz()会给出日期集的所有连续特征对之间的散点图。在这里,我们通过选择图的指数来绘制 Pclass 对 Fare 和年龄对 SibSp(船上兄弟姐妹/配偶的数量)。

ExpNumViz(data[,-1], scatter = TRUE)[4:5]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仅将数据集传递给方法会绘制每个连续要素的密度分布。

双变量分析:连续特征与分类反应特征

同样,只需要一行代码就可以生成箱线图,显示分类反应特征的不同水平的分布(“用 1 编码的存活”和用 0 编码的未存活”)。下面我们列举其中的两个例子。

ExpNumViz(data = data,target = "Survived")[4:5]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

幸存乘客的票价中值更高(因此等级也更高)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有父母/孩子在车上的乘客有更高的生还机会

分类特征:单变量分析

ExpCatViz除数据集外,没有任何其他参数,绘制每个分类特征中级别计数的%条形图。我们在下面列举了一些例子。

ExpCatViz(data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只有 38%幸存下来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三等舱乘客比例最高,为 55%

分类特征:具有目标特征的双变量分析

ExpCatViz方法采用 2 个附加参数targetmargin,并生成数据集中所有分类特征与“幸存”目标分类特征的每个级别的柱状图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由руслангамзалиевUnsplash 上拍摄

ExpCatViz(data, margin = 2, target = "Survived", 
          col = c("red","green"))[c(1,3:5)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

女性乘客的存活率更高

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三等舱乘客的待遇。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

冷却…更大的家庭没有存活下来。更好的生存变化与更小的家庭群体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

机上儿童/父母人数较多的乘客存活率低/无存活率

上述两个情节可能指出了在一个有更多兄弟姐妹、父母和配偶的更大的家庭团体中旅行的乘客所面临的悲惨困境,即不能离开家人。看看存活率的悬殊!

总而言之,我们只用了不到六行代码就能完成大量的 EDA 数字运算和可视化。请给出你的反馈和意见,以及哪个是你最喜欢的 EDA 包,为什么。

感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值