跳轉到主要內容
工程的博客

風險管理現代化第1部分:流媒體的攝入、快速發展和蒙特卡羅模擬模型的規模

2020年5月27日 工程的博客

分享這篇文章

第2部分的加速器在這裏

風險管理在金融服務,特別是在銀行業,已經在過去的幾年中增加了複雜性。首先,新框架(如FRTB)被引入,可能需要巨大的計算能力和多年的曆史數據分析的能力。同時,監管機構要求更高的透明度和explainability其監管的銀行。最後,引進新技術和商業模式意味著需要良好的風險管理是在一個高。然而,銀行業的能力有效地滿足這些需求沒有一個輕鬆的任務。傳統銀行依靠本地基礎設施不能有效地管理風險。銀行必須放棄傳統技術的計算效率低下,並構建一個敏捷的現代風險管理實踐能夠快速響應市場和經濟波動通過使用數據和先進的分析。最近的經驗表明,當出現新的威脅時,曆史數據和聚合風險模型迅速失去預測值。風險分析師必須增強傳統數據替代數據集,以探索的新方法識別和量化其業務所麵臨的風險,無論是在規模和實時。

在這個博客中,我們將演示如何現代化傳統風險價值(VaR)計算通過使用磚統一數據分析平台的各種組件——三角洲湖,Apache SparkTM和MLflow——為了使更敏捷和前瞻性的風險管理方法。Beplay体育安卓版本

使用的磚建築的現代化傳統VaR計算。

第一個係列的筆記本電腦將涵蓋多個數據工程和數據科學的挑戰必須解決的有效風險管理現代化實踐:

  • 使用三角洲湖市場數據的統一視圖
  • 利用MLflow作為模型的開發和部署的運載工具
  • 使用Apache引發大規模分發蒙特卡羅模擬

能夠有效地分割成你的蒙特卡羅模擬為了有一個更靈活和前瞻性的風險管理方法將在第二個博客,更側重於風險分析師角色。

現代化與三角洲湖數據管理

隨著大數據和雲計算技術的興起,它的風景已經大大改變了過去十年。然而,大多數FSIs仍然依賴於主機和運作數據庫等核心業務風險的VaR計算和移動隻有一些下遊過程的現代數據湖泊和雲基礎設施。結果,銀行落後技術曲線及其當前的風險管理實踐已不再滿足現代經濟。現代化風險管理開始於數據。具體地說,通過將鏡片的數據是:不是成本,而是作為一種資產。

老方法:當數據被認為是一個成本FSIs的限製風險分析師的能力探索“如果”場景和限製他們的聚合數據豎井隻滿足預定義的風險策略。隨著時間的推移,維護豎井的剛性導致工程師分支新流程和創建新的聚合視圖已經脆弱的工作流程的基礎上,為了適應不斷變化的需求。矛盾的是,不斷努力保持數據作為一個低成本商品本地導致生態係統更加脆弱,因此更昂貴的維護。失敗的流程(注釋如下X符號)有太多的下遊影響為了保證數據的及時性和可靠性。因此,盤中(可靠的)視圖市場風險日益複雜和成本高昂的實現給出如下的係統化和相互依賴的所有移動組件圖。
傳統的風險管理方法,優先考慮保存數據成本較低,地方金融風險管理者處於劣勢。

現代的方法:當數據被認為是一種資產,組織接受的多功能特性數據,提供多個用例(如風險價值和預期缺口),使各種特別的分析(如理解風險暴露在一個特定的國家)。風險分析師不再局限於一個狹窄的風險,可以采用更敏捷的風險管理方法。通過統一的流和批ETL,確保酸合規和模式的實施,三角洲湖使性能和可靠性數據湖,逐漸增加的質量和相關性數據通過青銅,白銀和黃金之間的鴻溝層和操作流程和分析數據。

現代金融風險管理方法強調增加數據的質量和相關性之間的鴻溝和操作流程和分析數據。

在這個演示中,我們評估各種投資的風險水平在拉美股票投資組合由40儀器跨多個行業,將所有返回存儲在一個集中的三角洲湖表,將推動我們所有的風險價值計算(第2部分覆蓋在我們的演示)。

樣本的風險投資組合各種拉丁美洲的儀器。

這個演示的目的,我們從雅虎財經訪問每日近價格使用python yfinance圖書館。在現實生活中,一個可能獲取市場數據直接從源係統(如變化數據捕獲從大型機)三角洲湖表,將原始信息存儲在青銅和策劃/銀表,驗證數據在實時。

三角洲湖上我們的核心數據,我們使用一個簡單的窗口函數來計算每天的日誌返回和輸出結果返回給黃金表準備風險建模和分析。

@udf(“雙重”)def compute_return (第一個,關閉):返回浮動(np。日誌(關閉/第一個))窗口=Window.partitionBy (“股票”).orderBy (“日期”).rowsBetween (1,0)
              火花\.read \(stock_data_silver) \.withColumn(“第一次”,F.first (“關閉”)。(窗口))\.withColumn(“返回”,compute_return (“第一”,“關閉”))\選擇(“日期”,“股票”,“返回”).write \.format \(“δ”).mode \(“覆蓋”).saveAsTable (stock_data_gold)

在下麵的示例中,我們將展示一種特定的投資擔保的數據(Grupo AVAL accion y英勇s.a.),一個金融服務公司的操作在哥倫比亞。鑒於其股價下跌預期發布2020年3月,我們可以評估其影響整體風險的投資組合。

樣本數據所使用的磚來說明現代金融風險方法的有效性和數據管理。

發展與MLFlow簡化模型

雖然不是一個新概念,定量分析近期數據科學與數據量的爆炸式增長發現了主要銀行的運作方式的低效率模型。沒有行業標準,數據科學家經常操作在最大的努力的基礎上。這通常意味著訓練模型對數據樣本單節點和手動跟蹤模型在整個開發過程,導致發布周期長(可能需要6到12個月之間提供一個模型生產)。長模型開發周期阻礙的能力讓他們快速適應新興威脅和動態減少相關的風險。FSIs的臉在這個範式的主要挑戰是減少模型開發到生產時間沒有這樣做的治理法規或導致數據科學的生態係統更加脆弱。

MLflow是事實上的標準來管理機器學習模型發展生命周期將不變性和透明度,但並不局限於人工智能。銀行的定義模型通常是相當廣泛的,包括任何金融從Excel宏模型基於規則的係統或先進的機器學習,他們將使中央模型提供的注冊表內MLflow磚統一數據分析平台。Beplay体育安卓版本

複製模型開發

在這個例子中,我們要培養一個新的模型,預測股票收益給市場指標(如標準普爾500指數、原油和美國國債)。我們可以檢索的數據,以確保完整的模型再現性和審計合規。這種能力的三角洲湖是通常被稱為“時間旅行”。由此產生的數據集將保持一致的所有實驗,可以訪問現有用於審計。

描述market_return曆史;選擇*market_return時間戳作為“2020-05-04”;選擇*market_return版本作為2;

為了選擇合適的特征模型,定量分析師經常火花和導航熊貓dataframes。我們這裏顯示如何從pyspark python環境以提取我們的市場因素的相關性。磚互動的筆記本內置的數據可視化和也完全支持使用Matplotlib seaborn(或ggplot2 R)。

factor_returns_pd=factor_returns_df.toPandas ()factor_corr=factor_returns_pd。相關係數(方法=“槍兵”,min_periods=12)

樣本variance-covariance表由磚互動生成的筆記本,證明其有效性和嚴格在構建其預測風險模型。

假設我們的指標不相關(它們)和預測我們的投資組合的回報(他們),我們想記錄這張圖作為我們成功的實驗證據。這說明內部審計、模型驗證功能以及監管機構模型進行了探索與最高質量標準及其發展與實證結果領導。

mlflow.log_artifact (“/ tmp / correlation.png”)

並行訓練模型

隨著儀器在我們的投資組合的數量增加,我們可能想要訓練並行模型。這可以通過一個簡單的熊貓UDF函數如下。為了方便(模型可能在現實生活中更複雜的),我們想訓練一個簡單的線性回歸模型和聚合所有模型係數n x m矩陣工具的數量(n和m的數量特性來源於我們的市場因素)。

模式= StructType ([StructField (“股票”、StringType ()真正的),StructField (“重量”ArrayType (FloatType ()),真正的)])@pandas_udf (模式,PandasUDFType.GROUPED_MAP)deftrain_model(組,pdf):X = np.array (pdf (“特性”])X = sm。add_constant (X,預謀=真正的)y = np.array (pdf (“返回”])= sm模型。OLS (y, X) .fit ()w_df = pd.DataFrame (data =[[模型。params]],列= (“重量”])w_df [“股票”)=集團(0]返回w_dfmodels_df = x_train.groupBy (“股票”蘋果(train_model) .toPandas ()

由此產生的數據集(重量為每個模型)可以很容易地收集回記憶和記錄到MLflow作為我們的模型候選人的實驗。在下麵的圖,我們報告的預測與實際股票為哥倫比亞S.A.返回來自我們的模型,哥倫比亞的石油和天然氣生產商。

樣本模型輸出可視化保留MLflow以及實驗中,其修訂,和底層數據,提供完整的透明度、可追溯性和上下文。

我們現在的實驗是存儲在MLflow與所有證據都需要一個獨立的驗證單位(IVU)提交可能你的一部分風險管理模型框架。是關鍵,這個實驗不僅與我們的筆記本,但確切的修訂,將獨立專家和監管機構的全麵跟蹤我們的模型以及模型驗證所需的所有必要的上下文。

蒙特卡羅模擬在規模與Apache火花

風險價值是模擬隨機漫步的過程,涉及可能的結果以及最壞情況(n)場景。風險價值95% (t)天是最好的情況最差的5%試驗。因此我們要產生足夠的模擬覆蓋一係列可能的結果給出一個90天的曆史市場波動觀察所有儀器在我們的投資組合。鑒於模擬每個儀器所需的數量,這個係統必須設計具有高度的並行性,使風險價值完美的工作負載在基於雲的環境中執行。風險管理是首要原因今天的頂級銀行評估雲計算分析並加速通過磚運行時的值。

創建一個多元分布

同時行業建議20到30之間產生成千上萬的模擬,混合組合的主要計算風險價值的複雜性並不是衡量個人資產的回報,但它們之間的相關性。在組合層麵,市場指標可以在本機python中優雅地操縱而無需複雜的矩陣計算轉移到分布式框架。因為它是常見的有多個書籍和投資組合的操作,這個過程可以很容易地擴展並行分布矩陣計算。我們使用市場回報的最後90天來計算今天的波動(提取均值和協方差)。

def retrieve_market_factors (from_date to_date):from_ts=F.to_date (F.lit (from_date))。(TimestampType ())to_ts=F.to_date (F.lit (to_date))。(TimestampType ())f_ret=spark.table market_return_table \過濾器(F.col (“日期”)>from_ts) \過濾器(F.col (“日期”)
              我們生成一個具體的市場條件通過采樣點市場的多變量投影(單個正態分布我們的市場因素的疊加)。這提供了一個特征向量,可以注入到我們的模型,以預測的回歸我們的金融工具。
defsimulate_market(f_ret_avg f_ret_cov,種子):np.random。種子(年代eed = seed)返回np.random。multivariate_normal (f_ret_avg f_ret_cov)

產生一致的和獨立的大規模臨床試驗

另一個模擬的複雜性風險價值是通過精心修複隨機數來避免自相關使用的“種子”。我們希望每個審判獨立雖然一致工具(為每個模擬市場環境是相同的位置)。參見下麵的一個例子創建一組獨立的和一致的審判——運行相同的塊會導致兩次相同的一組向量生成的市場。

seed_init =42種子= [seed_init + xxnp.arange (0,10)]market_data = [simulate_market (f_ret_avg f_ret_cov s)年代種子)market_df = pd。DataFrame (market_data、列= feature_names)market_df [“關注”]=種子

在分布式環境中,我們希望每個執行者集群負責多個模擬多個工具。我們定義我們的種子策略,以便每個執行者負責num_instruments x (num_simulations / num_executors)試驗。鑒於100000年蒙特卡洛模擬,50執行人的並行性和10個工具在我們的投資組合,每個執行器將運行20000儀器返回。

#修複我們的最初的種子今天的實驗trial_date=datetime.strptime (“2020-05-01”,' % Y - % - % d ')seed_init=int(trial_date.timestamp ())#創建我們的種子策略遺囑執行人種子=[[seed_init+x, x%並行性)xnp.arange (0,運行)seed_pdf=pd.DataFrame(數據=種子,列=(“種子”,“執行人”])seed_sdf=spark.createDataFrame seed_pdf .repartition(並行性,“執行人”)#評估緩存實現策略seed_sdf.cache ()seed_sdf。()

我們組的種子,每個執行者和生成試驗模型通過使用熊貓UDF。請注意,可能有多種方式來達到相同的,但這種方法的好處完全控製水平的並行性,以確保沒有熱點發生和執行人將閑置等待其他任務完成。

@pandas_udf (股票代碼字符串,種子int,審判浮動,PandasUDFType.GROUPED_MAP)defrun_trials(pdf):#獲取我們的廣播市場波動模型和90天模型= model_dict.valuef_ret_avg = f_ret_avg_B.valuef_ret_cov = f_ret_cov_B.value
              試驗= []種子np.array (pdf.seed):market_features = simulate_market (f_ret_avg f_ret_cov、種子)股票行情自動收錄器、模型models_dict.items ():審判= model.predict (market_features)試用追加((股票、種子、試驗))返回pd。DataFrame(試驗、列= (“股票”,“種子”,“審判”])#並行執行蒙特卡洛mc_df = seed_sdf.groupBy (“執行人”蘋果(run_trials)

白天我們追加試驗分區到三角洲湖表這樣,分析師可以很容易地訪問一天的模擬和組個人返回由審判Id(即種子)為了訪問每日收益分配模式及其各自的風險價值。

白天用試驗樣本三角洲湖表分區已附加到促進風險分析師的評論。

對原來的數據成為核心資產的定義(如反對作為成本),我們存儲所有試驗富含組合分類法(如行業類型和操作的國家),使一個更全麵的和按需麵臨的風險投資策略的看法。這些概念的切割風險價值數據高效、輕鬆地(通過使用SQL)將在我們的博客第2部分,集中更多的對風險分析師角色。

開始使用現代VaR方法和風險管理

在本文中,我們演示了如何現代化銀行風險管理實踐,有效地擴展他們的蒙特卡羅模擬從幾萬到幾百萬利用雲計算的靈活性和魯棒性的Apache火花。我們還演示了如何磚,作為唯一統一的數據分析平台,幫助加速開發生命周期模型,將實驗的透明度和可靠性數據,連接科學和工程之間的差距,使銀行能夠有一個Beplay体育安卓版本更健壯的敏捷方法,風險管理。

看看第2部分本係列的。

今天試試下麵的磚!如果你想學習如何統一數據分析可以使數據科學、業務分析和工程一起加速您的數據和ML的努力,看看按需車間-統一的數據管道、業務分析和機器學習與Apache引發™

VaR和風險管理筆記本:

養成用筆記本

聯係我們更多地了解我們如何幫助客戶與市場風險的用例。beplay体育app下载地址

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map