apeescape2.com
  • メイン
  • 財務プロセス
  • エンジニアリング管理
  • 革新
  • 技術
財務プロセス

Pythonと財務–スプレッドシートをパワーアップ

エグゼクティブサマリー

Pythonが金融の専門家が学ぶのに最適なプログラミング言語であるのはなぜですか?
  • Pythonは高級プログラミング言語です。つまり、他の言語で明示的に処理する必要のある、メモリ管理などのプログラミングの技術的側面の多くを抽象化して処理します。これにより、技術的なバックグラウンドがない人でもPythonを簡単に使用できます。
  • この言語は読みやすさと使いやすさを念頭に置いて設計されているため、最も習得しやすい言語の1つです。 Pythonコードは簡潔で、平易な英語に近いものです。
  • Pythonは、プロトタイピングと迅速で反復的な開発に最適です。そのインタラクティブなインタプリタツールは、コードの各行を個別に記述して実行し、結果をすぐに確認できる環境を提供します。
  • 同時に、Pythonは堅牢でパフォーマンスが高いため、コアシステムや大規模なアプリケーションにも実行可能な選択肢となっています。
  • Pythonには、便利なツールの大規模な標準ライブラリに加えて、このチュートリアルで使用されているPandasライブラリやNumPyライブラリなど、財務分析とコンピューティング用の優れたサードパーティライブラリがあります。
Pythonとファイナンスを一緒に実装するためのいくつかのユースケースは何ですか?
  • Pythonスクリプトを使用して、反復的なタスクとワークフローを自動化し、時間を節約し、手動エラーのリスクを減らすことができます。
  • スクリプトを使用すると、ユーザーはスプレッドシート、データベース、APIからデータを簡単に取得したり、Webデータをスクレイピングしたりできます。これらのデータは、強力な統計および分析ツールを使用して処理および分析できます。
  • Excelのさまざまなプラグインを使用すると、ユーザーはスプレッドシートとPythonコードの間にリアルタイムの双方向リンクを作成できます。
  • Pythonは、モンテカルロシミュレーションなど、標準のスプレッドシートではすぐに利用できない新しいタイプの分析を可能にします。
  • アルゴリズム取引は、もはやヘッジファンドや大規模な投資銀行の独占的な領域ではありません。 Pythonを使用すると、独自の取引戦略を短期間で低コストで開発、バックテスト、およびデプロイできます。

スプレッドシートのトロールに長い間依存してきた職業にとって、Pythonは特に価値があります。アメリカの銀行であるCitigroupは、研修生のアナリスト向けにPythonでクラッシュコースを導入しました。 - エコノミスト

金融の専門家は長い間アクセスしてきました VBA(Visual Basic for Applications) Excelでカスタム機能を構築し、ワークフローを自動化します。近年のGoogleスプレッドシートの出現により、スプレッドシートの分野で真剣な競争相手として、 Google Apps Script 現在、追加の選択肢を提供しています。

ただし、3番目のオプションに注意を向けたいと思います。 Pythonプログラミング言語 、多くの分野で絶大な人気を博しています。



この記事では、Pythonで達成できることの例をいくつか紹介します。まず、言語自体の概要と、Web開発、機械学習、金融など、さまざまな分野でPythonが非常に人気がある理由について説明します。ほんの数例を挙げると、科学と教育です。後半は、ステップバイステップのチュートリアルで構成されます。

私がこれを書く目的は、Pythonを財務ツールボックスに追加することを検討するのに十分な興味をそそられるように見えるかどうかを判断するのに役立つことです。あなたが飛躍するならば、言語を学ぶために利用できる多くのアプリ、コース、ビデオ、記事、本とブログ投稿があります。作品の最後に、その過程で私を助けてくれたいくつかのリソースをリストアップしました。

ユースケース:Pythonを使用した例

私のプログラミング入門は学習でした ベーシック に 任意の1 1980年代半ばに。当時、BASICは最も一般的な初心者の言語でした。 80年代後半から90年代半ばまで私が手を出した他の言語は、パスカルとCでしたが、専門的な立場でそれらを使用したことはなく、プログラミングスキルを必要としたり使用したりすることは期待していませんでした。 90年代後半の私の知る限り、私が金融のキャリアパスに着手することを選択したとき、金融とプログラミングは非常に異なる分野でした。

プライベートエクイティファンドを始める方法

2012年に早送りし、趣味としてプログラミングを取り戻すことを考えていたので、当時利用可能な言語の調査を開始しました。かなりのことが起こったことが判明し、Pythonに出くわしたとき、次のセクションで概説する多くの理由で夢中になりました。それ以来、私は個人的にも専門的にも、小さなスクリプトから大きなプロジェクトまで、幅広いタスクにPythonを使用してきました。すべてではありませんが、多くの金融専門家のワークベンチであるスプレッドシートが関係しています。

スプレッドシートとPythonがうまく連携できる例をいくつか示します。

1. M&A統合PMOセットアップでの時間の経過に伴う数百のアクティビティの追跡

私は、実行だけでなく統合も含めて、M&Aトランザクションのすべての側面に取り組んでいます。最近のケースでは、PMOチームは、12の統合ワークストリームのそれぞれの高レベル計画にウォーターフォール計画とガントチャートを使用し、進行中の数百のアクティビティを追跡するためのかんばんボードを使用して、ハイブリッドプログラムとプロジェクト管理アプローチを決定しました。最初の100日間の計画以降、いつでもオンになります。選ばれたかんばんツール、 MeisterTask には、多くの統計機能とレポート機能がありますが、分析と表示の点で私たちのニーズはそれを超えており、カスタムソリューションが必要でした。これは、Pythonを使用して自動化したワークフローです。

  1. ボード全体のステータスを毎週CSVファイルとして保存します。
  2. すべての履歴CSVファイルを パンダDataFrame 。
  3. データを並べ替え、フィルタリング、グループ化、操作して、進行状況を追跡する方法について合意された形式にします(アクティビティ、ワークストリームなどのステータスによって)。
  4. 各分析のデータを独自のシートに入れてExcelファイルに書き込み、簡単にコピーして貼り付けることができるようにフォーマットします。 think-cell チャート。
  5. 毎月の運営委員会会議のレポートパッケージの表とグラフを作成します。

スクリプトの開発には数時間の先行投資が必要でしたが、現在、運営委員会の会議や臨時の分析のためにレポートパックを更新するのに数分かかります。文字通り、適切なフォルダーに移動して1行のコマンドでスクリプトを実行するのに約30秒かかり、次に出力をコピーしてスライドデッキに貼り付けるのに数分かかります。すでに実行開始から約1か月の12のワークストリームで約500のアクティビティ(カード)があり、それらがどのように移動するかを毎週追跡します。2年間のプログラムのタイムライン内で、数千、最終的には数十のデータポイントを処理していることにすぐに気付きます。ファイルの。自動化がなければ、ここでは非常に面倒なタスクについて話します。

物事を進めることと、自動化を設定して初期ワークロードを追加することの間の「お金の時間的価値」のトレードオフは、財務の一般的なテーマです。このプロセスの最初のステップで、データをCSVファイルとしてエクスポートすることにより、同様の決定を行いました。 MeisterTaskは、多くの最新のWebアプリケーションと同様に、 APIを持っています 、Pythonアプリケーションに接続できますが、セットアップに費やした時間は、ここでのユースケースの時間節約をはるかに上回ります。

したがって、ご覧のとおり、多くの場合、最適なソリューションは、ワークフローの特定のステップを自動化し、他のステップを手動に保つことです。

2. Webスクレイピング、Google Maps API、Excelを使用した住宅価格統計の分析

もう1つの例は、私が個人的な興味から行ったことですが、Pythonのユーティリティの他の興味深い要素がいくつか含まれているため、強調したいと思います。

  1. 特定のエリアの住所、サイズ、部屋数、提示価格、その他の機能を含む、不動産リストのスクレイピングデータ。合計で数百からおそらく千行。
  2. Pythonデータ構造に保存します。
  3. Google Maps APIに接続し、リストごとに、プロパティと、海、市内中心部、最寄りの駅、最寄りの空港などの主要なランドマークとの間の距離を取得します。
  4. データをExcelファイルにエクスポートします。
  5. 標準のExcel機能を使用して実行する 回帰 、統計を計算し、平方メートルあたりの価格やランドマークまでの距離などの標準的な指標に関するグラフを作成します。

ここでの結果は、好みや不動産を探す際の経済的制限の観点から、あなた自身の個人的な重みと組み合わせることができます。

これらは、スプレッドシート関連の作業の自動化と機能の追加に焦点を当てた2つの例にすぎませんが、Pythonの機会はほぼ無限です。次のセクションでは、Pythonでのステップバイステップのモンテカルロシミュレーションチュートリアルに進む前に、それが非常に人気になった理由の概要を説明します。

Pythonが金融専門家にとって優れた選択肢である理由

プログラミング言語Pythonは1990年から存在していますが、その人気が爆発的に高まったのは近年になってからです。

Pythonは最も検索されているプログラミング言語です

これにはいくつかの理由があります。それぞれを順番に見ていきましょう。

1.Pythonは高級プログラミング言語です

高水準プログラミング言語は、コンピューターの内部動作の詳細の多くを抽象化する言語です。良い例はメモリ管理です。低レベルのプログラミング言語では、タスクの処理に費やされる時間とコード行に加えて、コンピュータのメモリのレイアウト、割り当て、解放の複雑さを詳細に理解する必要があります。 Pythonはこれらの詳細の多くを抽象化して自動的に処理するため、達成したいことに集中できます。

2.簡潔です

Pythonは高級プログラミング言語であるため、コードはより簡潔で、技術的な実装の詳細ではなく、達成したいことのビジネスロジックにほぼ完全に焦点を合わせています。言語設計の選択がこれに貢献します。例として、Pythonは、他の多くの言語のように関数、ループ、および線を描くために中括弧やセミコロンを使用する必要がないため、より簡潔になり、一部の議論では改善されます。読みやすさ。

3.習得と理解が容易

Pythonでの言語設計の選択に影響を与えた1つの観察は、プログラムが書かれるよりも頻繁に読まれるということです。 Pythonは、コードが平易な英語に非常に近いため、特にスクリプトまたはプログラムのさまざまなコンポーネントに適切な方法で名前を付ける場合に、ここで優れています。

4.迅速で反復的な開発に適しています

啓発された試行錯誤は、完璧な知性の計画よりも優れています。 - デビッド・ケリー

Pythonは、プロトタイピングや迅速で反復的な開発(そして、はい、試行錯誤)に理想的です。 Pythonシェル 、 IPython、およびJupyterノートブック Pythonツールチェーンの最前線と中心です。これらのインタラクティブな環境では、コードの各行を個別に記述して実行し、結果(または役立つエラーメッセージ)をすぐに確認できます。他の言語にもこれがありますが ほとんどの場合、Pythonと同程度ではありません 。

5.プロトタイピングとプロダクションコードの両方に使用できます

Pythonは、プロトタイピングに最適であるだけでなく、大規模な本番アプリケーション向けの優れた強力な言語でもあります。世界最大のソフトウェア会社のいくつかは、さまざまなアプリケーションやユースケースでPythonを多用しています。

6.「付属のバッテリー」が付属しています:Python標準ライブラリ

基本的な操作に必要なものはすべて言語に組み込まれていますが、それに加えて、 Python標準ライブラリ ファイル、メディア、ネットワーク、日付と時刻の情報などを操作するためのツールがあります。これにより、サードパーティのパッケージを探すことなく、さまざまなタスクを実行できます。

7.財務分析のための優れたサードパーティライブラリ

金融の専門家のために、パンダは DataFrame そして シリーズ オブジェクト、およびそのNumpy ndarray Pythonを使用した財務分析の主力製品です。 matplotlibやその他の視覚化ライブラリと組み合わせると、生産性を高めるための優れたツールを自由に利用できます。

8. Pythonは無料です!

Pythonはオープンソースライセンスの下で開発されており、商用利用も無料です。

PythonとFinanceを一緒に使用するためのステップバイステップのチュートリアル

以下は、で説明されているモンテカルロシミュレーションの簡略化されたバージョンを作成する方法を示すステップバイステップのチュートリアルです。 私の以前のブログ投稿 、ただし、Excel用の@RISKプラグインの代わりにPythonを使用します。

::はC ++で何をしますか

モンテカルロ法は、数値結果を得るためにランダムサンプリングに依存しています。そのようなアプリケーションの1つは、変数または仮定が値の範囲をとることができる、世界の不確実な潜在的な将来の状態を表す確率分布からランダムサンプルを抽出することです。

オプションやその他のデリバティブの評価を示す一般的な例ではなく、簡略化されたDCF評価モデルでモンテカルロシミュレーションを実行すると便利です。これには、財務諸表の計算の基本以外の計算は必要ないためです。キャッシュフローを割り引いて、Pythonの概念とツールに集中できるようにします。ただし、この基本的なチュートリアルモデルは、主要な概念を説明することを目的としており、実際の目的でそのまま使用することはできません。また、モンテカルロシミュレーションのより学術的な側面については触れません。

このチュートリアルは、変数や関数など、プログラミングの基本的な構成要素に精通していることを前提としています。そうでない場合は、たとえば、主要な概念を確認するのに10分かかると役立つ場合があります。 この紹介 。

出発点と望ましい結果

モンテカルロシミュレーションチュートリアルで使用したものと同じ非常に単純化されたDCF評価モデルから始めます。 3つの財務諸表からのいくつかの重要な項目と、強調表示された3つの入力セルがあります。これらには、Excelバージョンでは、潜在的な結果の範囲の調査を開始するために確率分布に置き換えたい点推定があります。

財務予測の例

小さなスクリプトを開発するための2段階のアプローチ

それを機能させ、正しくし、速くする- ケントベック

このチュートリアルの目的は、Pythonを初めて使用する財務専門家に、便利なプログラムがどのように見えるかだけでなく、プログラムの開発に使用できる反復プロセスについても紹介することです。したがって、2つの部分があります。

  1. 最初に、私は簡単なアプローチを使用して実用的なプロトタイプを開発します。これは、最初から始める場合にこのプロジェクトを開始するために使用できるプロセスと完全に異なるわけではなく、従うのが簡単だと思います。
  2. 次に、実用的なプロトタイプを開発した後、リファクタリングのプロセスを説明します。つまり、機能を変更せずにコードの構造を変更します。その部分に固執することをお勧めします-これは最初のソリューションよりもエレガントなソリューションであり、ボーナスとして、実行時間の点で約75倍高速です。

1.実用的なプロトタイプの開発

JupyterNotebookのセットアップ

Jupyterノートブックは、Pythonをインタラクティブに操作するための優れたツールです。これは、コード、マークダウンテキスト、画像、またはその他のデータを含むことができるセルを備えたインタラクティブなPythonインタープリターです。このチュートリアルでは、 PythonQuantプラットフォーム 、しかし私もお勧めできます Googleによるコラボラトリー 、無料でクラウドで実行されます。そこに到達したら、「ファイル」メニューで「新しいPython 3ノートブック」を選択するだけで、準備が整います。

それが終わったら、次のステップは、データの操作と視覚化に必要なサードパーティのパッケージをインポートし、個別のウィンドウではなく、ノートブックにグラフをインラインで表示することをプログラムに指示することです。

import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline

最初の変数に名前を付ける前の注意。すでに強調したように、読みやすさはPythonの強みの1つです。言語設計はそれをサポートするのに大いに役立ちますが、コードを書くすべての人は、他の人だけでなく自分自身にとっても、それを読みやすく理解できるようにする責任があります。なので イーグルソンの法則 「6か月以上見ていなかった自分のコードは、他の誰かが書いたものかもしれません」と述べています。

経験則として、プログラムの機能を説明する個別のコメントの必要性を最小限に抑えるように、プログラムのコンポーネントに名前を付けることをお勧めします。

それを念頭に置いて、次に進みましょう。

財務諸表の作成

Pythonで既存のスプレッドシートデータを操作する方法はたくさんあります。たとえば、read_excelを使用して、1行のコードでシートをPandasDataFrameに読み込むことができます。コマンド。スプレッドシートとPythonコード間のより緊密な統合とリアルタイムのリンクが必要な場合は、両方があります 自由 そして 商業の その機能を提供するために利用可能なオプション。

ここでのモデルは非常に単純であり、Pythonの概念に焦点を当てるために、スクリプトで最初からモデルを再作成します。最初のパートの最後に、作成したものをスプレッドシートにエクスポートする方法を示します。

財務諸表のPython表現を作成するための最初のステップとして、適切なデータ構造が必要になります。選択できるものはたくさんあり、Pythonに組み込まれているものもあれば、さまざまなライブラリからのものもあります。独自に作成することもできます。とりあえず、Pandasライブラリのシリーズを使用してその機能を見てみましょう。

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P'] sales = pd.Series(index=years) sales['2018A'] = 31.0 sales

この入力とそれに対応する出力を以下に示します。

データベーステーブルの設計にはどのようなタスクが関係していますか?

Pythonライブラリからシリーズを作成する

最初の3行で、年(それぞれが実績、予算、または予測のいずれであるかを示すためにマークされている)、開始値(元のDCFモデルのように数百万ユーロ)、およびで構成されるインデックスを持つデータ構造を作成しました。投影用の空の(NaN、「数値ではない」)セル。 4行目は、データの表現を出力します。一般に、対話型インタープリターで変数または他のオブジェクトの名前を入力すると、通常、データの適切な表現が得られます。

次に、予測される年間売上成長を表す変数を宣言します。この段階では、これは点推定であり、元のDCFモデルと同じ数値です。最初にこれらの同じ入力を使用し、PythonバージョンがExcelバージョンと同じように実行され、同じ結果が得られることを確認してから、点推定を確率分布に置き換えることを検討します。この変数を使用して、前年と成長率に基づいて予測の各年の売上を計算するループを作成します。

growth_rate = 0.1 for year in range(1, 6): sales[year] = sales[year - 1] * (1 + growth_rate) sales

NaNの代わりに売上を予測しました。

Pythonと財務:売上高の予測

同じアプローチを使用して、財務諸表を継続し、必要に応じて変数を宣言し、最終的にフリーキャッシュフローに到達するために必要な計算を実行します。そこに着いたら、私たちが持っているものがDCFモデルのExcelバージョンが言っていることに対応していることを確認できます。

ebitda_margin = 0.14 depr_percent = 0.032 ebitda = sales * ebitda_margin depreciation = sales * depr_percent ebit = ebitda - depreciation nwc_percent = 0.24 nwc = sales * nwc_percent change_in_nwc = nwc.shift(1) - nwc capex_percent = depr_percent capex = -(sales * capex_percent) tax_rate = 0.25 tax_payment = -ebit * tax_rate tax_payment = tax_payment.apply(lambda x: min(x, 0)) free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc free_cash_flow

これにより、フリーキャッシュフローが得られます。

プログラミング言語をどのように作成しますか

Pythonからの割引キャッシュフロー出力

この段階でおそらくコメントが必要な上の1行は、2番目のtax_paymentです。参照。ここでは、小さな関数を適用して、税引前利益がマイナスになるシナリオで、プラスの納税が行われないようにします。これは、PandasシリーズまたはDataFrameのすべてのセルにカスタム関数を効果的に適用できることを示しています。もちろん、実際に適用される関数は単純化です。より現実的なモデル 大きい 評価演習 いくつかの会社固有の要因に基づいて支払われる実際の現金税を計算する別個の税モデルがあります。

DCF評価の実行

予測キャッシュフローに到達したら、単純な最終値を計算し、現在までのすべてのキャッシュフローを割り引いて、DCF結果を取得できます。次のコードでは、インデックス作成とスライスを導入しています。これにより、PandasSeriesオブジェクトなどのデータ構造内の1つ以上の要素にアクセスできます。

構造体の名前の直後に角かっこを書くことで要素にアクセスします。単純なインデックス付けは、ゼロから始まる位置によって要素にアクセスします。つまり、free_cash_flow[1]私たちに2番目の要素を与えるでしょう。 [-1]は最後の要素にアクセスするための省略形であり(昨年のキャッシュフローは最終値の計算に使用されます)、コロンを使用するとスライスが得られます。つまり、[1:]過去の年を含めたくないので、最初の要素を除くすべての要素を提供します2018A DCF評価で。

cost_of_capital = 0.12 terminal_growth = 0.02 terminal_value = ((free_cash_flow[-1] * (1 + terminal_growth)) / (cost_of_capital - terminal_growth)) discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)] dcf_value = (sum(free_cash_flow[1:] * discount_factors) + terminal_value * discount_factors[-1]) dcf_value

Python割引キャッシュフロー計算からのdcf出力

これでプロトタイプの最初の部分は終わりです。これで、非常に初歩的なモデルではありますが、Pythonで動作するDCFモデルができました。

データのエクスポート

実際のモンテカルロシミュレーションに移る前に、Pandasパッケージで利用可能なエクスポート機能について説明する良い機会かもしれません。 Pandas DataFrameオブジェクトがある場合は、to_excelを使用して1行でExcelファイルに書き込むことができます。方法。他の12以上のフォーマットや宛先にエクスポートするための同様の機能もあります。

output = pd.DataFrame([sales, ebit, free_cash_flow], index=['Sales', 'EBIT', 'Free Cash Flow']).round(1) output.to_excel('Python DCF Model Output.xlsx') output

Pythonで生成されたExcelテーブル出力の例

モンテカルロシミュレーションの確率分布の作成

これで、次の課題に取り組む準備が整いました。点推定入力の一部を確率分布に置き換えることです。この時点までの手順は、Excelで同じモデルを作成する場合に比べてやや面倒に思えるかもしれませんが、次の数行でPythonがいかに強力であるかを垣間見ることができます。

最初のステップは、シミュレーションで実行する反復回数を決定することです。開始点として1,000を使用すると、適切な出力プロットを取得するのに十分なデータポイントを取得することと、適切な時間枠内でシミュレーションを終了することのバランスが取れます。次に、実際の分布を生成します。簡単にするために、ここでは3つの正規分布を生成しましたが、 NumPyライブラリには多数のディストリビューションがあります から選択するために、そして同様に見るべき他の場所があります、 Python標準ライブラリ 。使用する分布を決定した後、平均や標準偏差などの形状を記述するために必要なパラメーター、および望ましい結果の数を指定する必要があります。

iterations = 1000 sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations) ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations) nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations) plt.hist(sales_growth_dist, bins=20) plt.show()

Pythonからのモンテカルロシミュレーション出力

ここで、EBITDAは売上高から独立した別個の確率変数ではなく、売上高とある程度相関している必要があると主張できます。私はこれに同意し、コスト構造(変動コスト、半変動コスト、固定コスト)のダイナミクスと主要なコスト要因(一部には独自の確率分布がある場合があります)をしっかりと理解することによって推進する必要があることを付け加えます。たとえば、入力商品の価格など)ですが、スペースと明確さのために、これらの複雑さはここでは脇に置いておきます。

分布とパラメーターの選択を通知する必要のあるデータが少なければ少ないほど、さまざまなデューデリジェンスワークストリームの結果と経験を組み合わせて、考えられるさまざまなシナリオに関するコンセンサスビューを形成する必要があります。この例では、キャッシュフローの予測では、主観的な要素が大きくなります。つまり、確率分布を視覚化することが重要になります。ここでは、2行の短いコードで、売上成長の分布を示す基本的な視覚化を取得できます。このようにして、チームの集合的な見解を最もよく反映する眼球への分布をすばやく表示できます。

これで、シミュレーションを実行するために必要なすべてのビルディングブロックができましたが、シミュレーションを実行するのに便利な形式ではありません。これまでに使用したものと同じコードを次に示しますが、すべて1つのセルにまとめて、便宜上関数に再配置しました。

def run_mcs(): # Create probability distributions sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations) ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations) nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations) # Calculate DCF value for each set of random inputs output_distribution = [] for i in range(iterations): for year in range(1, 6): sales[year] = sales[year - 1] * (1 + sales_growth_dist[0]) ebitda = sales * ebitda_margin_dist[i] depreciation = (sales * depr_percent) ebit = ebitda - depreciation nwc = sales * nwc_percent_dist[i] change_in_nwc = nwc.shift(1) - nwc capex = -(sales * capex_percent) tax_payment = -ebit * tax_rate tax_payment = tax_payment.apply(lambda x: min(x, 0)) free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc # DCF valuation terminal_value = (free_cash_flow[-1] * 1.02) / (cost_of_capital - 0.02) free_cash_flow[-1] += terminal_value discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)] dcf_value = sum(free_cash_flow[1:] * discount_factors ) output_distribution.append(dcf_value) return output_distribution

これで、シミュレーション全体を実行し、出力分布をプロットできます。これは、次のコードを使用して、1,000回の反復ごとのこの会社の割引キャッシュフロー値になります。 %timeコマンドはPythonコードではなく、何かを実行する時間を測定するノートブックの省略形です(代わりに使用できます 標準ライブラリのPython関数 )。実行するコンピューターによって異なりますが、このバージョンでは、1,000回の反復を実行して結果を視覚化するのに1〜2秒かかります。

%time plt.hist(run_mcs(), bins=20, color='r') plt.show()

Pythonスクリプトからのモンテカルロシミュレーション出力

2.プロトタイプの改良

何かを単純化できるという疑念が潜んでいるのは、やりがいのある課題の世界で最も豊富な情報源です。 - エドガー・ダイクストラ

リファクタリングとは、既存のコードを書き直して、機能を変更せずに構造を改善するプロセスのことであり、コーディングの最も楽しくてやりがいのある要素の1つです。これを行う理由はいくつかあります。それは次のようになるかもしれません:

  1. より賢明な方法でさまざまな部分を整理します。
  2. 変数と関数の名前を変更して、目的と動作を明確にします。
  3. 将来の機能を許可して準備します。
  4. 実行速度、メモリフットプリント、またはその他のリソース使用率を改善します。

そのプロセスの1つのステップがどのように見えるかを示すために、プロトタイプスクリプトのように全体に分散するのではなく、すべての初期変数を1つの場所に収集することで、先ほど説明したプロトタイプをクリーンアップし、次のプロセスを通じて実行速度を最適化しました。 ベクトル化 。

NumPy配列を使用すると、さまざまな種類のデータ処理タスクを、ループの記述が必要になる可能性のある簡潔な配列式として表現できます。明示的なループを配列式に置き換えるこの方法は、一般にベクトル化と呼ばれます。 ウェス・マッキンニー

見た目がすっきりし、理解しやすくなりました。

# Key inputs from DCF model years = 5 starting_sales = 31.0 capex_percent = depr_percent = 0.032 sales_growth = 0.1 ebitda_margin = 0.14 nwc_percent = 0.24 tax_rate = 0.25 # DCF assumptions r = 0.12 g = 0.02 # For MCS model iterations = 1000 sales_std_dev = 0.01 ebitda_std_dev = 0.02 nwc_std_dev = 0.01 def run_mcs(): # Generate probability distributions sales_growth_dist = np.random.normal(loc=sales_growth, scale=sales_std_dev, size=(years, iterations)) ebitda_margin_dist = np.random.normal(loc=ebitda_margin, scale=ebitda_std_dev, size=(years, iterations)) nwc_percent_dist = np.random.normal(loc=nwc_percent, scale=nwc_std_dev, size=(years, iterations)) # Calculate free cash flow sales_growth_dist += 1 for i in range(1, len(sales_growth_dist)): sales_growth_dist[i] *= sales_growth_dist[i-1] sales = sales_growth_dist * starting_sales ebitda = sales * ebitda_margin_dist ebit = ebitda - (sales * depr_percent) tax = -(ebit * tax_rate) np.clip(tax, a_min=None, a_max=0) nwc = nwc_percent_dist * sales starting_nwc = starting_sales * nwc_percent prev_year_nwc = np.roll(nwc, 1, axis=0) prev_year_nwc[0] = starting_nwc delta_nwc = prev_year_nwc - nwc capex = -(sales * capex_percent) free_cash_flow = ebitda + tax + delta_nwc + capex # Discount cash flows to get DCF value terminal_value = free_cash_flow[-1] * (1 + g) / (r - g) discount_rates = [(1 / (1 + r)) ** i for i in range (1,6)] dcf_value = sum((free_cash_flow.T * discount_rates).T) dcf_value += terminal_value * discount_rates[-1] return dcf_value

このバージョンと前のバージョンの主な違いは、for i in range(iterations)がないことです。ループ。 NumPyの配列操作を使用すると、このバージョンはプロトタイプバージョンの1.35秒と比較して18ミリ秒で実行されます。これは約75倍高速です。

%time plt.hist(run_mcs(), bins=20, density=True, color='r') plt.show()

NumPy配列の操作例

このチュートリアルの目的のためだけに、プロトタイプと洗練されたバージョンの両方を短時間でまとめたので、さらに最適化できると確信しています。

さらに進んで

このチュートリアルでは、Pythonの強力な機能のいくつかを示しました。これをさらに開発する場合、機会はほぼ無限です。たとえば、次のようになります。

  • Webページまたはその他のデータソースから関連する企業またはセクターの統計をスクレイプまたはダウンロードして、仮定と確率分布の選択を通知します。
  • 基本的および/またはマクロ経済的要因に基づく自動取引アルゴリズムなどの定量的金融アプリケーションでPythonを使用します。
  • スプレッドシートやプレゼンテーション形式で出力を生成するエクスポート機能を構築し、内部トランザクションのレビューおよび承認プロセスの一部として、または外部プレゼンテーションに使用します。

Pythonの成功に貢献したさまざまなウェブ、データサイエンス、機械学習アプリケーションで何ができるかについては触れていません。

要約:金融ツールボックスに役立つ言語

この記事では、Pythonプログラミング言語の概要を説明し、金融で非常に人気が高まった理由のいくつかをリストし、小さなPythonスクリプトを作成する方法を示しました。ステップバイステップのチュートリアルでは、Pythonを使用して、反復プロトタイピング、インタラクティブな財務分析、および評価モデルやアルゴリズム取引プログラムなどのアプリケーションコードを作成する方法について説明しました。

私にとって、結局のところ、Pythonテクノロジーのキラー機能は、作業が楽しいということです。問題解決、物事の構築、ワークフローの効率化を楽しんでいるなら、ぜひ試してみることをお勧めします。私はあなたがそれで何をしたか、またはそれでやりたいことを聞きたいです。

グーグルマップは、直感的なウェブマッピングソフトウェアでデータ視覚化の新しい基準を設定しました。

金融専門家がPythonを学ぶための推奨リソース

  • オライリーの本。私は特にお勧めできます:
    • Python for Finance イヴ・ヒルピッシュ
    • Pythonの学習 マーク・ルッツ
    • 流暢なPython ルシアーノ・ラマーリョ
  • PythonQuants
  • PyConがYouTubeで語る
  • Udemy

基本を理解する

Pythonは財務でどのように使用されていますか?

Pythonは主に、資産価格の傾向と予測の定量的および定性的分析に使用されます。また、さまざまなデータソース間でワークフローを自動化するのにも役立ちます。

Pythonはいつ作成されましたか?

Pythonは1980年代に考案され、1989年12月に最初に実装されました。

Pythonプログラミングは何に使用されますか?

Pythonは、さまざまな分野にわたるユースケースを備えた、順応性のあるジェネラリストプログラミング言語です。アプリケーションのプログラミングの側面に注意を払うことで、プログラマーは作成の機能に集中することができます。

製品を販売するための適切なeコマースビジネスモデルの選択

収益性と効率性

製品を販売するための適切なeコマースビジネスモデルの選択
あなたのスキルを披露する–ポートフォリオを作成する方法

あなたのスキルを披露する–ポートフォリオを作成する方法

Uxデザイン

人気の投稿
教師あり機械学習アルゴリズムの調査
教師あり機械学習アルゴリズムの調査
M&A販売プロセス中に考慮すべき評価ドライバー
M&A販売プロセス中に考慮すべき評価ドライバー
初期市場参入の課題
初期市場参入の課題
Adobe CCを使用してワイヤーフレームを作成できることを誰が知っていましたか?
Adobe CCを使用してワイヤーフレームを作成できることを誰が知っていましたか?
愛を込めてデザイナーへ(フロントエンド開発者からの手紙)
愛を込めてデザイナーへ(フロントエンド開発者からの手紙)
 
モバイル向けの情報アーキテクチャの原則(インフォグラフィック付き)
モバイル向けの情報アーキテクチャの原則(インフォグラフィック付き)
リモートワークスペースでの機会と行動の促進
リモートワークスペースでの機会と行動の促進
タレントマッチングディレクター
タレントマッチングディレクター
iOS用の自動テストを作成する方法
iOS用の自動テストを作成する方法
Hotjar:UXと変換のヒント
Hotjar:UXと変換のヒント
人気の投稿
  • c法人またはs法人とは
  • 閉鎖の原則は次のように述べています。
  • cとc ++とは何ですか
  • 携帯電話でt9はどういう意味ですか
  • adobe xdvsスケッチ2018
  • 新しい日付()
カテゴリー
仕事の未来 財務プロセス トレンド 設計プロセス バックエンド モバイルデザイン 技術 ヒントとツール リモートの台頭 ライフスタイル

© 2021 | 全著作権所有

apeescape2.com