當前位置:
首頁 > 知識 > 使用Python進行優化:如何以最小的風險賺取最多的收益?

使用Python進行優化:如何以最小的風險賺取最多的收益?

(此處已添加圈子卡片,請到今日頭條客戶端查看)

我們展示了如何將一個諾貝爾經濟學獎獲獎理論應用於股票市場,並使用簡單的Python編程解決由此產生的優化問題。

使用Python進行優化:如何以最小的風險賺取最多的收益?

打開今日頭條,查看更多圖片

介紹

現代數據科學與分析企業的主要目標之一是為商業和技術公司解決複雜的優化問題,使它們的利潤最大化。

在我的 「使用Python進行線性規劃和離散優化」 文章中,我們討論了基本的離散優化概念,並引入了一個Python庫PuLP來解決這些問題。

《通過Python使用PuLP庫來進行線性規劃和離散優化》

文章地址:https://towardsdatascience.com/linear-programming-and-discrete-optimization-with-python-using-pulp-449f3c5f6e99

雖然一個線性規劃(LP)問題僅由線性目標函數和線性約束來定義,但它可以應用於從醫療保健到經濟、商業到軍事等不同領域的各種各樣的問題。

在本文中,我們使用Python編程展示了LP在經濟分析領域的一個驚人應用——最大化股票市場投資組合的預期利潤,同時最小化與之相關的風險。

聽起來是不是很有趣?請接著閱讀。

如何在股票市場上實現收益最大化和風險最小化?

1990年的諾貝爾經濟學獎授予了Harry Markowitz,他以著名的「現代投資組合理論(MPT)」而聞名。最早的論文發表可以追溯到1952年。

使用Python進行優化:如何以最小的風險賺取最多的收益?

這裡的關鍵詞是平衡的。

一個好的、平衡的投資組合必須同時提供保護(最小化風險)和機會(最大化收益)。

《如何優化投資組合風險-傻瓜式教程》

地址:https://www.dummies.com/business/accounting/auditing/how-to-optimize-portfolio-risk/

而且,當涉及到諸如最小化和最大化之類的概念時,很自然地就會將問題轉換為數學優化理論。


這裡的基本理念相當簡單,它根植於人類與生俱來的避險天性。

一般來說,股票市場的統計數據顯示,風險越大,收益越高的概率越大,風險越低,收益越小的概率越大。

MPT假設投資者是規避風險的,也就是說,給定兩種預期回報率相同的投資組合,投資者會選擇風險較小的那一種。思考一下。你只會在高風險股票具有高回報率的情況下才會買入。

但如何量化風險呢?這確實是一個模糊的概念,對不同的人可能意味著不同的事情。然而,在普遍接受的經濟理論中,股票價格的變化性(波動性)(在固定的時間範圍內定義)等同於風險。


因此,核心的優化問題是在保證一定收益回報的同時,將風險最小化。或者,將利潤最大化,同時將風險保持在一定的閾值以下。

使用Python進行優化:如何以最小的風險賺取最多的收益?

一個例子問題

在本文中,我們將展示一個非常簡化版本的投資組合優化問題,它可以被轉換成一個LP框架,並使用簡單的Python腳本來有效地解決。

這樣做的目的是說明這種優化解決程序在處理複雜的實際問題方面的能力和可能性。

我們用?Microsoft、 Visa和Walmart這三家公司 24個月的股票價格(月均價)來進行處理。這些是比較老的數據,但它們完美地展示了這個過程。

使用Python進行優化:如何以最小的風險賺取最多的收益?

24個月內某三家公司的月股價。

如何定義回報率? 我們可以簡單地計算一個滾動的月回報率,方法是用當月的平均股價減去上個月的平均股價,再除以上個月的股價。

使用Python進行優化:如何以最小的風險賺取最多的收益?

回報率列在下圖中。

使用Python進行優化:如何以最小的風險賺取最多的收益?

優化該模型

股票的回報率是一個不確定的量。我們可以把它建模為一個隨機向量。

使用Python進行優化:如何以最小的風險賺取最多的收益?

投資組合也可以建模為一個向量。

使用Python進行優化:如何以最小的風險賺取最多的收益?

因此,一個特定投資組合的收益由這些向量的內積給出,它是一個隨機變數。最重要的問題是:


我們如何通過比較隨機變數(對應於不同的投資組合)來選擇一個「最佳」的投資組合?

根據Markowitz模型,我們可以將問題表述為,


給定一定數量的資金(比如1000美元),我們應該在這三種股票中各投資多少,以便(a)一個月的預期回報率至少達到一個給定的閾值,(b)最小化投資組合回報率的風險(方差)。

我們不能投資負數。這就是非負約束,

使用Python進行優化:如何以最小的風險賺取最多的收益?

假設沒有交易成本,總投資由手頭的現金限制,

使用Python進行優化:如何以最小的風險賺取最多的收益?

投資的回報率,

使用Python進行優化:如何以最小的風險賺取最多的收益?

但這是一個隨機變數。所以,我們必須處理預期的量,

使用Python進行優化:如何以最小的風險賺取最多的收益?

假設我們想要一個最小的期望回報率。因此,

使用Python進行優化:如何以最小的風險賺取最多的收益?

現在,為了模型化風險,我們需要計算方差,

使用Python進行優化:如何以最小的風險賺取最多的收益?

綜合起來,最終的優化模型是,

使用Python進行優化:如何以最小的風險賺取最多的收益?

接下來,我們將展示如何使用一個流行的Python庫來構想和解決這個問題。

使用Python解決優化問題: CVXPY庫

我們將用於這個問題的庫稱為CVXPY。它是一種用於凸優化問題的Python嵌入式建模語言。它允許你按照數學模型以一種自然的方式表達問題,而不是按照解決程序所要求的限制性標準形式。

完整的代碼在這個Jupyter notebook(地址:https://github.com/tirthajyoti/Optimization-Python/blob/master/Portfolio_optimization.ipynb )中有給出。這裡,我只顯示核心代碼片段。

要建立必要的數據,關鍵是要從月度價格數據表中計算出回報率矩陣。代碼如下,

使用Python進行優化:如何以最小的風險賺取最多的收益?

現在,如果你並排查看原始數據表和回報率表,它看起來像這樣,

使用Python進行優化:如何以最小的風險賺取最多的收益?

接下來,我們只需從這個回報率矩陣中計算平均(期望)回報率和協方差矩陣,

使用Python進行優化:如何以最小的風險賺取最多的收益?

之後,CVXPY就允許我們簡單地按照我們上面構建的數學模型來設置問題,

使用Python進行優化:如何以最小的風險賺取最多的收益?

注意CVXPY框架中使用了quad_form()和Problem()等非常有用的類。

瞧!

我們可以編寫一個簡單的代碼來解決這個問題,並顯示出最優的投資量,即在保證最小回報為2%的同時,也將風險保持在最小。

使用Python進行優化:如何以最小的風險賺取最多的收益?

最終結果如下,

使用Python進行優化:如何以最小的風險賺取最多的收益?

對這個問題進行擴展

不用說,我們模型的設置和簡化假設可以使這個問題聽起來比實際問題更簡單。但是一旦你理解了解決這種優化問題的基本邏輯和機制,你就可以把它擴展到多個場景中,

  • 數百隻股票,較長時間跨度的數據
  • 多重風險/回報率和閾值
  • 最小化風險或最大化回報率(或兩者兼而有之)
  • 共同投資一組公司
  • 任意一個/或場景——要麼投資可口可樂,要麼投資百事可樂,但不要兩者都投資

你必須構造一個更複雜的矩陣和更長的約束列表,使用指示變數將其轉換為一個混合的整數問題——但是所有這些都是CVXPY之類的包本來就支持的。

請查看CVXPY包的示例頁面(地址:https://www.cvxpy.org/examples/index.html ),了解使用該框架可以解決的優化問題的範圍。

總結

在這篇文章中,我們討論了如何使用一個影響深遠的經濟學理論中的關鍵概念來構想出一個簡單的股票市場投資優化問題。

為了說明這一點,我們選取了三家公司的月平均股價作為樣本數據集,並展示了如何使用基本的Python數據科學庫(如NumPy、panda)和一個名為CVXPY的優化框架在短時間內建立一個線性規劃模型。


擁有這種靈活而強大的包的工作知識,將為將來的的數據科學家技能集增加巨大的價值,因為解決優化問 題的需求已經開始出現在科學、技術和業務問題的所有方面。

我們鼓勵讀者嘗試這個投資問題的更複雜版本,以獲得樂趣和學習。

#數據科學, #編程, #統計

使用Python進行優化:如何以最小的風險賺取最多的收益?

如果你有任何問題或想法要分享,請在tirthajyoti[AT]gmail.com與作者聯繫。此外,你還可以在作者的GitHub倉庫中查看有關Python、R、MATLAB和機器學習資源的其他有趣代碼片段。如果你和我一樣對機器學習/數據科學充滿熱情,請隨時在LinkedIn上添加我或在Twitter上關注我。


英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE3/make-money-with-least-risk.pdf

譯者:Nothing

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

Python成為所有這些銀行職位的首要條件
Python中Scikit-Learn庫的分類方法總覽

TAG:Python部落 |