Dowhy,一个强大的Python库,做金融量化领域的可以尝试下!

简介: Dowhy,一个强大的Python库,做金融量化领域的可以尝试下!

引言


在数据科学和机器学习领域,因果推断是一个重要的课题。旨在从数据中识别变量之间的因果关系,比如说:“如果我做了某件事,会发生什么?”这类问题,而非仅是描述“某件事与其他事情有关联”。


Dowhy 作为一个用于因果推断的Python工具包,提供了一种简单而强大的方法来进行因果推断分析。


介绍


Dowhy 是一个由微软发布的端到端的用于 因果推断(Causal Inference的 Python 库。


旨在简化从数据中识别因果关系的过程。Dowhy 提供了一整套统一标准的API,支持从建模到识别,再到因果效应估计和验证的整个工作流程。


主要特点:


  • 基于一定经验假设的基础上,将问题转化为因果图,验证假设。
  • 提供因果推断的接口,整合了两种因果框架。
  • DoWhy支持对后门、前门和工具的平均因果效应的估计,自动验证结果的准确性、鲁棒性较高。


Dowhy 的整个因果推断过程可以划分为四大步骤:


  • 「建模」(model):利用假设(先验知识)对因果推断问题建模。
  • 「识别」(identify):在假设(模型)下识别因果效应的表达式(因果估计量)。
  • 「估计」(estimate):使用统计方法对表达式进行估计。
  • 「反驳」(refute):使用各种鲁棒性检查来验证估计的正确性。


安装及API使用


接下来,为大家介绍下Dowhy库的安装和基本用法。


包括如何加载数据、定义因果模型、进行因果推断分析等。


安装


Dowhy的安装同其他Python三方库一样,直接使用pip命令安装即可。

pip install dowhy

如果存在依赖,需额外安装pygraphviz库


API使用步骤:


1、导入所需的库, 并加载数据(这里以加载csv文件为例)

# 导入所需的库
import pandas as pd
import dowhy
from dowhy import CausalModel
# 加载数据
data = dowhy.datasets.linear_dataset(
    beta=10, # 因果效应值
    num_common_causes=5, # 混杂因子,用w表示,作用于干预变量和结果变量
    num_instruments=2, # 工具变量,用 Z 表示,作用于干预变量(间接影响结果)
    num_samples=10000,  # 样本数量
    treatment_is_binary=True) # 干预为二元变量,用 v 表示
df = data["df"] # DoWhy 使用 pandas 的 dataframe 来载入数据
print(df.head(5))

输出数据:

Z0    Z1   W0   W1   W2   W3   W4   v0   y
0 0.0 0.478130 0.313025 0.274645 1.794765 -1.551661 1.250724 True 17.033979
1 0.0 0.546833 -0.197845 -2.404349 1.120160 -1.011344 0.812087 True 3.074740
2 0.0 0.874135 1.047078 -0.056460 0.440413 -0.067349 0.970203 True 15.530070
3 0.0 0.913483 0.934282 -1.180582 0.498135 -1.079074 -1.659924 True 5.046809
4 0.0 0.366969 -0.364818 0.630643 -0.330043 0.572139 -0.433893 True 11.004590

2、执行因果推断,建模,生成因果关系图

model=CausalModel(
        data = df,
        treatment=data["treatment_name"],
        outcome=data["outcome_name"],
        graph=data["gml_graph"]
        )
model.view_model() # 对构建的因果图可视化
from IPython.display import Image, display
display(Image(filename="causal_model.png"))

利用这张图来识别因果效应(从因果估计量到概率表达式)并进行估计。


3、识别和估计因果关系


识别


可以脱离于数据,仅根据图进行识别,其给出的结果是一个用于计算的「表达式」。

identified_estimand = model.identify_effect()
print(identified_estimand)

输出结果:

Estimand type: EstimandType.NONPARAMETRIC_ATE
### Estimand : 1
Estimand name: backdoor
Estimand expression:
  d                       
─────(E[y|W1,W0,W4,W2,W3])
d[v₀]                     
Estimand assumption 1, Unconfoundedness: If U→{v0} and U→y then P(y|v0,W1,W0,W4,W2,W3,U) = P(y|v0,W1,W0,W4,W2,W3)
### Estimand : 2
Estimand name: iv
Estimand expression:
 ⎡                              -1⎤
 ⎢    d        ⎛    d          ⎞  ⎥
E⎢─────────(y)⋅⎜─────────([v₀])⎟  ⎥
 ⎣d[Z₁  Z₀]    ⎝d[Z₁  Z₀]      ⎠  ⎦
Estimand assumption 1, As-if-random: If U→→y then ¬(U →→{Z1,Z0})
Estimand assumption 2, Exclusion: If we remove {Z1,Z0}→{v0}, then ¬({Z1,Z0}→y)
### Estimand : 3
Estimand name: frontdoor
No such variable(s) found!

估计

estimate = model.estimate_effect(identified_estimand,
        method_name="backdoor.propensity_score_stratification")
print(estimate)

输出结果:

*** Causal Estimate ***
## Identified estimand
Estimand type: EstimandType.NONPARAMETRIC_ATE
### Estimand : 1
Estimand name: backdoor
Estimand expression:
  d                       
─────(E[y|W1,W0,W4,W2,W3])
d[v₀]                     
Estimand assumption 1, Unconfoundedness: If U→{v0} and U→y then P(y|v0,W1,W0,W4,W2,W3,U) = P(y|v0,W1,W0,W4,W2,W3)
## Realized estimand
b: y~v0+W1+W0+W4+W2+W3
Target units: ate
## Estimate
Mean value: 9.942351552191596

可以通过 target_units 参数来选择因果效应分析的群体,如 ate(群体层面)、att(干预组)、ate(对照组)。也可以指定结果修改变量来分析不同变量对结果的影响。


当然因果关系也可以验证其准确性,DoWhy 中的专业术语叫反驳,通过某些类型的混杂因子或随机变量进行干预。


总结


Dowhy是一个非常强大且实用的Python库,用于进行因果推断分析。它提供了工具和方法来识别因果关系、估计因果效应,并验证因果推断的可靠性。该库的设计简单易用,旨在帮助用户进行可解释的因果推断分析。


当然 DoWhy 也有其局限性。有些情况结果可以会有偏差。虽然它提供了多种工具来测试模型稳健性,但最终结果的可信度还取决于因果模型的合理性和数据质量。

相关文章
|
14天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
17天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
45 0
|
10天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
27 4
|
10天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
22 2
|
15天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
36 7
|
1月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
16天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
19天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
39 5
|
18天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
30 2
|
27天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
37 3