Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/head.php on line 135

テクノロジー


Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/bzb-functions.php on line 589

AIに仕事を奪われた私たちに何が出来るのか

「AIやロボットによって、人間は単純作業から開放され、付加価値の高い業務に集中できる」

そんな声を聞きます。

本当にAIは私たちの仕事を楽にしてくれるのでしょうか?

本記事は「AIで私たちは単純作業から開放されるのか」という主張に対する私見を述べつつ、高付加価値業務にシフトすることの難しさに触れながら、来るべきAI時代を前に私達は何をすべきかを考察します。

続きを読む

「ブロックチェーンで監査はなくなる」という誤解について

こんにちは、毛糸です。

AIやブロックチェーンなど、新しいテクノロジーが次々と生まれては、またたくまにビジネスに適用されていくのが今の時代です。

テクノロジーは我々の仕事を効率化し、人間がより人間らしく働くことの後押しをしてくれると期待されていますが、一方で「仕事を奪われる」という脅威論もしばしば見られます。

この主張は果たして信じて良いのでしょうか。

続きを読む

「AIで会計士の仕事(監査)はなくなるのか」に対するひとつの数理的整理

こんにちは、毛糸です。

AI(人工知能)という言葉が広く知られるようになり、Deep learningのようなブレイクスルーがビジネスにも応用されつつあります。

AIは時折「人間の仕事を奪う」という文脈で脅威的な存在として語られることもあり、2013年のカール・ベネディクト・フレイとマイケル A. オズボーンの論文
「THE FUTURE OF EMPLOYMENT: HOW SUSCEPTIBLE ARE JOBS TO COMPUTERISATION?」(pdfリンク)

では多くの職業がコンピュータに取って代わられる可能性があることが示されています。

論文内に示される代替確率ランキングでは、Bookkeeping, Accounting, and Auditing Clerks(簿記、会計および監査職員)は702の職業のうち、代替確率が低い順に671位、代替されやすさでいえば31位に上がっています。

こうした状況の中で「AIで会計士の仕事(監査)はなくなるのか」という話題がしばしば取り上げられます。

本記事ではこの問いに対して、会計の数理モデルに基づく整理を述べ、AIによる監査の代替について考察します。

続きを読む

Excel VBA「RPAです」「よし、通れ!」に潜む危うさ

こんにちは、毛糸です。

先日こんなツイートを見かけました。

このツイートをパク……いえ、インスパイアされて、こんな呟きをしました。

本記事ではこのツイートの内容を深掘りし、VBAをRPAと間違えて通してしまうような状況がどうして起こるのか、その問題はどこにあるのかについて考えてみます。

RPAというバズワード

RPAとは、次世代の新しい労働力と期待される自動化システム(ロボティック・プロセス・オートメーション)のことです。

いまビジネス界ではAIと並ぶ技術として多くの企業が注目し、実際に業務に適用されています。

RPAに関しては、以前開催された勉強会PyCPAでも取り上げられ、大変反響がありました。

RPAは一種のバズワードとして、ビジネスマンなら知らないでは済まされない言葉になりつつあり、企業の「偉い人」たちの中でも、業務に組み込めないものかと画策する人は少なくありません。

冒頭のツイートは、そんなRPAブームを風刺するものです。

VBAではなくRPA、その心は

RPAは業務アプリケーションをまたぐようなプロセスの自動化を可能にするソフトウェアです。

業務自動化という点に着目すれば、すでに「広く普及したツール」により、ある程度のことは可能になっています。

それがExcelマクロであり、その記述プログラミング言語であるVBAです。

Excel VBAはエクセルの操作の自動化や、他のOfficeソフトやインターネットエクスプローラーとの連携により、様々な処理を自動化可能です。

実際、大企業ではExcel VBAによる大規模なツールを開発・導入し、業務効率化を行っている例が数多くあります。

しかし、RPA全盛期の今、「それExcel VBAでもできますよ」というフレーズは、「偉い人」たちの心には刺さりません。

「RPAじゃないの?それじゃあだめだよ、RPAを使わなくちゃ」

と一蹴され、RPAではなくExcel VBAでプログラム組みましょうとはなりづらい現状があります。

このような現象はひとえに「RPAを使いたい」ということが目的化していることが原因です。

RPAは本来、従来の方法では自動化できなかったアプリケーション間の連携などを柔軟につなぎ合わせることが可能な技術として、業務改善に用いられるべきものです。

しかし空前の「RPAブーム」によって、「RPAを使うこと」それ自体が目的化し、そのために課題を探すという逆転現象が起こっているのです。

配られたカードと、課題と解決の一致

もちろん、RPAという新しい技術が世に広く知られたことで、見えてきた課題もあるでしょう。

スヌーピーでおなじみの漫画ピーナッツにもこんな名言があります。

配られたトランプで勝負するっきゃないのさ……(YOU PLAY WITH THE CARDS YOU’RE DEALT…)

RPAというカードが配られたからには、そのカードを使って勝ちを挙げたい、と考える人は多いでしょう。

しかし他者もやっているからうちも、とか、Excel VBAでできるような比較的簡単な自動処理もRPAでやりたい、とかいう話になってくると、手段と目的が入れ替わっていると言わざるを得ません。

ベストセラーになった『起業の科学』には、事業の成功の条件の1つに、問題と解決策が一致していること(プロブレム・ソリューション・フィット)を挙げています。

起業という文脈を抜きにしても、課題とその解決策が一致していなければその取組みから成果を上げることは難しく、したがって「解決策(RPA)」ありきで課題を見つけるようなやり方が、常にうまくいくとは限りません。

ましてや冒頭のように、Excel VBAを「RPAです」と言って「よしよし」と納得してしまうのは、RPAという技術がなんたるかを知らないばかりか、自分の課題すらも見失っているのではないかと心配になる状況です。

残念ながら、こんな笑い話のような状況が、たまに見聞きされるのです。

まとめ

RPAの革を被ったVBAが、「偉い人」の機嫌をとる風刺は、課題より解決策が先に来て目的化する危うさを含んでいます。
バズワードに惑わされることなく、いま自分たちが直面している課題はなにか、本当に必要な解決策はどういうものかということを、きちんと考える必要があるように思います。

quantmodの使い方とCAPMの計算|Rでプログラミング

こんにちは、毛糸です。

株式の期待リターンを推定するために広く用いられているのが、CAPM(Capital Asset Pricing Model)です。

CAPMは株式のリターンを市場ポートフォリオの1次関数として表す、とてもわかり易いモデルです。

本記事ではCAPMの計算(具体的には、ベータの推定)を、統計プログラミング言語Rで行う方法についてまとめます。

CAPMにおけるベータの推定には、個別株式と市場ポートフォリオのリターンのデータが必要になりますが、quantmodというパッケージを使えば、簡単に取得できるため、その方法も説明します。

また、推定に必要な無リスク金利(安全資産利子率)には、財務省が公表している国債利回りを用いることとします。

CAPM(Capital Asset Pricing Model、資本資産価格モデル)の概略

CAPMは、資産収益が正規分布するなどのいくつかの仮定のもとで成り立つ、危険資産(株式など)の期待リターンに関するモデルです。
CAPMでは、ある証券\( i\)の期待リターン\( E[r_i]\)は、無リスク金利\( r_f\)と市場ポートフォリオの期待リターン\( E[r_M]\)を用いて、以下のように表されます。
\begin{equation} \begin{split}
E[r_i]=r_f+\beta\left( E[r_M]-r_f\right)
\end{split} \end{equation}
係数の\( \beta\)(ベータ)は、証券\( i\)と市場ポートフォリオ\( M\)の連動性を示しています。
CAPMにおける\( \beta\)は、ある証券\( i\)の超過期待リターン\( E[r_i]-r_f\)を被説明変数、市場ポートフォリオの超過期待リターン\( E[r_M]-r_f\)を説明変数とした回帰分析によって求められます。
本記事では、統計プログラミング言語Rを用いて、
  • 証券と市場ポートフォリオのデータを取得しリターンを計算する方法
  • 無理リスク金利を取得する方法
  • 回帰分析を行う方法
を解説しています。

quantmodによる株価ヒストリカルデータの取得方法

Rライブラリ「quantmod」を用いると、個別株式の価格情報を入手することができます。
quantmodは、Rコンソールで以下を実行すればインストールできます。同時に「XML」というライブラリも必要になる(ないとエラーを吐く)ので、合わせてインストールしましょう。
install.packages(“quantmod”)
install.packages(“XML”)
quantmodライブラリを読み込みます。
library(quantmod)
getSymbols()関数を使うと、指定した証券コードの価格データをwebページから取得することができます。日本の株式では、Yahoo!ファイナンスを情報ソースにすればよいです。
本記事では、証券コード9984.Tソフトバンクグループの株価を、Yahoo!ファイナンスから、開始日”2013-06-01″、終了日”2019-05-31″で取得します。
証券コードは、Yahoo!ファイナンスの各証券のページの?code=以下に記載されているものです。
https://stocks.finance.yahoo.co.jp/stocks/detail/?code=9984.T
証券コードの.Tは市場(T=東京証券取引所)を示すものですが、なくても大丈夫かもしれません。
関数の最後の引数auto.assignは取得したデータを自動でオブジェクトに代入するかどうかを決めるもので、=TRUEとした場合は自動的に「YJ9984.T」というオブジェクトに情報が格納されます。
getSymbols(“9984.t”,src=”yahooj”,from=”2013-06-01″,to=”2019-05-31″,auto.assign=TRUE)
auto.assign=FALSEとした場合には自動でオブジェクトに代入されないので、自分でオブジェクトに代入します。
data9984<-getSymbols(“9984.t”,src=”yahooj”,from=”2013-06-01″,to=”2019-05-31″,auto.assign=FALSE)
取得したデータは、日次ベースの時系列データになっており、始値・高値・安値・終値・取引高・調整後株価が格納されています。
以下の作業では終値の情報を使いますので、以下のように終値のみのデータを作ります。
Price_i<-YJ9984.T$YJ9984.T.Close
plotすることで株価の推移を見ることができます。
plot(Price_i)
\( t\)日目の日次リターン\( r_{i,t}\)は
\begin{equation} \begin{split}
r_{i,t}=\frac{P_{i,t} -P_{i,t-1}}{ P_{i,t-1}}\approx \log(P_{i,t})-\log(P_{i,t-1})
\end{split} \end{equation}

バブルに関する研究・文献まとめ【仮想通貨投資に役立つ?】

こんにちは、毛糸です。

2019年6月26日現在、ビットコイン価格が再び高騰しており、135万円を超えました。

ビットコインを始めとする仮想通貨(暗号資産)は2017年頃に劇的な価格高騰を引き起こし、現代の「バブル」として社会に大きな影響を与えました。
参考記事>>ビットコインはバブルである

リンクの記事でも述べたとおり、仮想通貨はキャッシュフローの裏付けがなく、厳密な意味で「資産」と呼べるか微妙な投資対象です。

基本的には「明日は今日より高くなる」という期待が価格形成に寄与する「バブル」的性格を持つと考えれます。

バブル資産としての仮想通貨は、その特徴的な価格変動やリターンの非正規性など、既存のファイナンス理論では説明しづらい部分が多くあります。
>>ビットコインの確率分布について|期待リターン、リスク、ヒストグラム【正規分布じゃない】

 

仮想通貨を理論的に扱おうとする場合には、バブル資産としての特徴を考慮する必要がありますが、バブル資産の理論研究は相対的に未成熟な分野です。

本記事ではファイナンス(金融工学)の立場からバブル資産を研究した文献をメモしておきます。

 

Continuous-Time Asset Pricing Theory: A Martingale-Based Approach(by R. Jarrow)

Robert Jarrowによるテキスト “Continuous-Time Asset Pricing Theory: A Martingale-Based Approach“には、バブル資産に関する比較的新しい研究成果が簡潔にまとまっています。
 
Jarrowは金利モデルで有名なヒース・ジャロー・モートンモデルの開発者のひとりです。
 
本書では、バブル資産を「局所マルチンゲール」という確率過程としてモデル化しており、おそらくこのアプローチが現在のバブル資産の標準的モデルと考えられます。
 
Jarrowはバブル資産に関する数多くの論文を執筆しており、本書はその研究成果のまとめとしても活用できるため、バブル資産の理解を深めたいと思ったら手に取るとよいでしょう。
 

 

 
 

A Mathematical Theory of Financial Bubbles(by P. Protter)

P. Protterによるノート”A Mathematical Theory of Financial Bubbles“は、前述のJarrowのテキストにも引用される、バブル資産の先駆的研究です。 

こちらもバブル資産を「局所マルチンゲール」としてモデル化し種々の分析を行っています。

局所マルチンゲールを含む確率過程論や確率微分方程式という数学は、理系大学の学部後半から大学院にかけて学ぶ内容であり、比較的高度です。

ファイナンスの数理的研究はこうした確率論と密接に結びついていますので、バブルの研究にも確率論の勉強は避けては通れないでしょう。

ファイナンスにも言及している、確率過程や確率微分方程式を扱ったテキストとしては以下が参考になります。

 

局所マルチンゲールとバブル(村上祐亮 著)

バブルに関する日本語の文献では、九州大学院の修士論文「局所マルチンゲールとバブル」(村上祐亮)が参考になります(PDFリンク)。
 
この論文ではファイナンスに関する確率論の基本事項を完結にまとめながら、バブル資産を局所マルチンゲールとしてモデル化し、種々の性質や具体例について説明しています。
 
JarrowのテキストやProtterのノートは英語ですが、こちらは日本語で書かれているので、数学の壁さえクリアできれば読みやすいかも知れません。
 
余談ですが、九州大谷口教授は確率論研究で有名な先生で、彼のゼミの修士論文は大変勉強になるので、よく参考にしています(谷口ゼミ修士論文一覧リンク)。
 

まとめ

本記事ではバブル資産に関する最近の研究を知るための文献をまとめました。
 
バブル資産に関する研究は比較的新しく、勉強しがいのある分野です。
 
本記事で取り上げた文献を丁寧に読み解けば、仮想通貨投資に役立てられる可能性もありますので、野心的な方は挑戦してみてください。
 
 

株価リターンが正規分布でなくてもファイナンス理論は成り立ちます!

こんにちは、毛糸です。

先日の記事で、主要地域の株価リターンが正規分布に従わないことを確かめました。
>>日本株式、米国株式、欧州株式、全世界株式の日次リターンが正規分布ではなかった件

 
この記事についてはSNSでもコメントが多く寄せられましたが、この手の「理論と現実は違う!」系の主張(というか批判)は昔からあるようで、中には建設的でない議論に終始するものもあるようです。

参考記事>>分散投資を批判した後の対案がそれ以上に酷い法則-梅屋敷商店街のランダム・ウォーカー(インデックス投資実践記)

今回はファイナンス理論の観点から、正規分布が成り立たない場合にも、既存のファイナンス理論は通用するのだということを説明します。

なお、本記事は以下の書籍の内容を参考にしているので、興味のある方はチェックしてみてください。

 

理論と現実の差は、理論の価値を損なうものではない

下記の記事で述べたとおり、主要地域の株価の日次リターンは、正規分布に従いません。
>>日本株式、米国株式、欧州株式、全世界株式の日次リターンが正規分布ではなかった件

 

投資期間が短い場合の株価リターンは正規分布に従わない、というのは学術的にも古くから指摘されており、また、投資期間が長い場合は正規性を棄却できないとする研究もあります。

ファイナンスの多くの理論研究は、資産収益が正規分布に従うことを仮定しており、正規分布と仮定しているからこそ見つかった性質というのも数多くあります。

しかし、ファイナンスの理論研究の多くは「モデル分析」、すなわち現実の問題の本質的な部分を切り取り抽象化して、他の部分は削ぎ落とした世界で成り立つ性質を調べる、というものです。

したがって、正規分布という仮定それ自体が、ある種の「捨象」であり、正規分布であることが本質的に重要でないことも多くあります。

仮に現実の株価リターンが正規分布でなくとも、ファイナンス理論の得た洞察が揺らぐものではありませんし、もし正規分布という過程によって揺らぐような理論を利用したいのであれば、自ら理論を修正すれば良いだけの話です。
>>理論・モデルの意義と、理論と現実の差異を知ったあとにとるべき行動

 

リターンが正規分布に従わない場合の平均分散分析

ファイナンスの標準的モデルが正規分布を使っているといっても、正規分布以外の分布の可能性を一切捨てているわけではなく、正規分布以外の分布で成り立つ命題を多くの研究者が探求しています。

投資理論においては、収益の平均(リターン)と分散(標準偏差、リスク)の情報を基に最適なポートフォリオを探求するという研究が、1950年台のマーコウィッツの研究以後、活発に調査されてきました。

このマーコウィッツの平均分散分析は、ノーベル経済学賞の受賞理由にもなり、昨今話題になっているロボアドバイザーの技術的根拠、さらには投資の王道「分散投資」の理論的裏付けにもなっています。

WEALTHNAVI(ウェルスナビ)

平均分散分析が成り立つためには、リターンが正規分布にしたがう、というのが十分条件になっています。

つまり、正規分布ならば平均分散分析が成り立つ、ということです。

現実には「正規分布ならば」が成り立っていませんので、平均分散分析が成り立つかはわかりません。

この点をもって「前提が破綻している!理論は不完全だ!」というのはあまりにも非論理的です。

正規分布でなくても、平均分散分析を成り立たせるような、別の十分条件があるかもしれないからです。

事実、その後の意欲的な研究により、リターンが正規分布でなくとも、楕円分布族というクラスに属していれば、平均分散分析(と同様の分析)が行えることがわかっています。

楕円分布族というのは、平たく言うとを横に輪切りにしたときの切り口が楕円(正規分布は正円です)になるような分布のことで、正規分布の他に、対称安定パレート分布t分布、分散混合の混合正規分布などがあります。

株価リターンがこれら分布に従えば、ポートフォリオのリターンも楕円分布に従うことがわかっています。

このとき、ある投資家は資産リターンが正規分布だと思い、別の投資家は安定分布だと思っていたとしても、パラメタが同じなら平均分散分析は成り立つちます。

ややテクニカルな話になりましたが、平均分散分析や分散投資という理論は、リターンが正規分布に従うという仮定でなくとも、本質的な部分は変わることなく成り立つということです。

まとめ

株価リターンが正規分布に従わないことがわかりましたが、それがファイナンス理論の破綻を意味するものではありません。
 
事実、リターンが正規分布に従わない場合にも、平均分散分析と同様の結論が得られます。
 

 

 

 

積立投資をシミュレーションするプログラムを作った(投資シミュレーションプログラムVer2)

こんにちは、毛糸です。
先日開発した「投資シミュレーションプログラム」は、年金運用やFXなど幅広い投資活動の分析に役立っています。
最初のバージョン以降、レバレッジと撤退の意思決定を考慮したり、ベクトル演算による高速化を行うなど、改善を続けてきました。
しかしながら、投資シミュレーションプログラムは実際の投資活動をリアルに分析するツールとしてはまだ不十分です。
今回、投資シミュレーションプログラムを更に改良し、積立投資の分析ができるようなプログラムにアップグレードしたので、その内容を解説します。

 

投資シミュレーションプログラムver2の改善点

今回アップデートする投資シミュレーションプログラムでは、「追加投資」の分析が行えるようになります。
従来の投資シミュレーションプログラムでは、投資期間を決めたら、期初に一括投資を行い、その後資金の出し入れは行わない前提で計算を行っていました。
しかし、実際の投資活動においては、投資資金の出し入れが行われることが通常であり、広く利用されている投資手法であるドルコスト平均法も、定期的な積立を行うものです。
今回アップデートする投資シミュレーションプログラムでは、投資期間中の資金の出入りスケジュールを計算に織り込むことができるようにします。
これにより、追加投資や引き出し、積立投資など、より現実的な分析が可能になります。
参考記事>>ドルコスト平均法の検証が難しい理由

コード例

投資シミュレーションプログラムでは、投資スケジュールを設定することで、投資期間中の追加投資や資金の引き出しが可能になります。
具体的には、投資スケジュールを時間区分の数だけ設定し、これを期中の投資時価に反映させます。
最終的な投資時価は期中の投資スケジュールを反映させたものになり、この投資時価を何万パターンも発生させることで、将来をシミュレーションします。

資金の出入りを反映させるに伴い、まず期間を原則として月数とするようにし、投資月数をhorizonという変数に格納します。

#投資年数(自由入力)
Year<-1
#1年あたりの月数(通常は12)
Month_par_year<-12
#投資月数
horizon<-Year*Month_par_year#monthes

また、投資期間中の資金の出入りを、inv_schedule変数に格納します。たとえば、毎月1万円の積立投資を行う場合には、指定した数字を繰り返す関数rep()を用いて、以下のように記述します。

#投資スケジュールを入力(自由入力)
inv_schedule<-rep(1,horizon)

投資のリスク・リターンも、月次ベースに直します。

#年率期待リターン(期待収益率μ、自由入力)
mu<-7/100
mu_par_month<-mu/Month_par_year
#年率リスク(標準偏差σ、自由入力)
sigma<-12.88/100
sigma_par_month<-sigma/(Month_par_year)^0.5

シミュレーションを行う繰り返し計算の部分に、前述のinv_scheduleの各要素を足すように変更します。

#シミュレーション開始
for (s in 1:sample){
        for ( t in 1:horizon){
            #撤退していれば計算を飛ばす
            if(W[s]==1) break
            #今年の資産額=前年の資産額*(1+レバ比率*収益率)
            A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t]
            #もし資産額が撤退額を下回ったら撤退目印を立てる
            if(A[s,t+1]<Withdraw)W[s]<-1
        }
}
以上を加味した、投資シミュレーションプログラムver2.0のコードは以下のとおりです。
#投資年数(自由入力)
Year<-1
#1年あたりの月数(通常は12)
Month_par_year<-12
#投資月数
horizon<-Year*Month_par_year#monthes
#シミュレーション回数(自由入力、多いほど正確だが時間がかかる)
sample<-1000
#シミュレーション数値を格納する行列
A<-matrix(0,sample,horizon+1)
#初期投資額を入力(自由入力)
initial<-1000
#投資スケジュールを入力(自由入力)
inv_schedule<-rep(1,horizon)
#シミュレーション数値に初期投資額を入力
A[,1]<-initial
#年率期待リターン(期待収益率μ、自由入力)
mu<-7/100
mu_par_month<-mu/Month_par_year
#年率リスク(標準偏差σ、自由入力)
sigma<-12.88/100
sigma_par_month<-sigma/(Month_par_year)^0.5
#レバレッジ比率
Lev<-1
#撤退をカウントする目印
W<-rep(0,sample)
#撤退額を設定
Withdraw<-0
#乱数を生成(ランダムな投資収益率)
set.seed(1234)
x<-rnorm(sample*horizon,mu_par_month,sigma_par_month)
#乱数(ランダムな収益率)を行列形式に変換
z<-matrix(x,sample,horizon)
#シミュレーション開始
for (s in 1:sample){
        for ( t in 1:horizon){
            #撤退していれば計算を飛ばす
            if(W[s]==1) break
            #今年の資産額=前年の資産額*(1+レバ比率*収益率)
            A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t]
            #もし資産額が撤退額を下回ったら撤退目印を立てる
            if(A[s,t+1]<Withdraw)W[s]<-1
        }
}
#シミュレーション結果の期待値を表示
paste(Year,"年後の資産額の期待値は",mean(A[,horizon+1]))
#シミュレーション結果の中央値を表示
paste(Year,"年後の資産額の中央値は",median(A[,horizon+1]))
#損する確率を表示
paste("損失を被る確率は",length(A[,horizon+1][A[,horizon+1]<initial])/sample)
#億り人になれる確率を表示
paste("億り人になれる確率は",length(A[,horizon+1][A[,horizon+1]>10000])/sample)
#破産する確率を表示
paste("破産する確率は",sum(W)/sample)
#将来の資産額の確率分布(ヒストグラム)を表示
hist(A[,Year+1])

 

まとめ

投資シミュレーションプログラムをアップデートし、期中の資金の出入りを考慮できるようになりました。
これにより、積立投資のシミュレーションや、資金の引き出しについての分析が行なえます。
具体的なシミュレーションの例は、近日公開予定です。

ドルコスト平均法の検証が難しい理由

こんにちは、毛糸です。

日本の年金制度に対する不透明感から、資産運用の必要性を感じている人も増えてきていることと思います。
資産運用の「王道」として挙げられるのが、投資信託などを毎月定額で積み立て購入する手法「ドルコスト平均法」です。
ドルコスト平均法は初心者でも実施できる効果的な投資手法として紹介されることも多いですが、実はその有用性については評価が分かれています。
本記事ではドルコスト平均法の有効性を検証することが難しい2つの理由を解説します。

ドルコスト平均法とは

ドルコスト平均法は投資手法の一つであり、決まった期間ごと(たとえば一ヶ月ごと)に一定の金額を投資することを指します。

ドルコスト平均法は投資の平均買い付け価格を下げる効果があるとされています。

ドルコスト平均法の考え方は単純で、手軽に行える投資手法であり、上記のような「効果」があるとされているため、人気の手法です。

しかし、ドルコスト平均法が投資手法として優れているのかというのは、学術的には肯定的な意見も否定的な意見もあり、科学的に立証された方法ではありません。

資産運用の初心者におすすめの入門書『難しいことはわかりませんが、お金の増やし方を教えてください!』には、ドルコスト平均法について、

三流ファイナンシャルプランナーが書いたんじゃない?

早めに買ってお金に働いてもらう期間が長いほうが、現時点の判断としては正しい。

と書かれており、ドルコスト平均法に否定的です。

このように、専門家の間でもドルコスト平均法の有効性については判断が分かれています。

以下ではなぜドルコスト平均法の検証が難しいのか、2つの理由を挙げます。

データ期間に依存する

ドルコスト平均法に関する設例の多くは、資産価格が上げ下げを繰り返すようなケースがほとんどです。

こういうケースにおいては、ドルコスト平均法によって、買い付け単価の平均は小さく抑えられます。

出典:三井住友DSアセットマネジメントhttps://www.daiwasbi.co.jp/fundcollege/investment/about/index4.html

しかし、これはあくまで「そういう相場だから有利だった」という話で、これからも上げ下げを繰り返すような相場になるとは限りません。
時には今を「底」として右肩上がりで資産価格が上昇する場合もあり、そのときは当初一括購入するのが、最も買い付け単価を安くする方法です。
このように、ドルコスト平均法の検証につかうデータ次第では、ドルコスト平均法が有利とも不利とも言えることになります。

したがって、特定期間のデータに依拠したドルコスト平均法の分析は説得力にかけるものがほとんどです。

データ期間に依存しない一般的なケースでの分析が難しいことが、ドルコスト平均法の分析を難しくする要因のひとつとなっています。

確率論の問題として扱いづらい

投資を確率論の立場から検証するのがファイナンス理論です。
ブラック・ショールズ式を厳密に証明しノーベル賞を受賞したロバート・マートンも、確率論に基づく最適ポートフォリオの研究をしています。
ファイナンス理論において投資を分析するのは今やメジャーとなっていますが、しかし、ドルコスト平均法は標準的なファイナンス理論とあまり相性がありません。
標準的なファイナンス理論では、資産価格が対数正規分布に従うと仮定されます。
参考記事>>年金のリスクとリターンを統計プログラミング言語Rで計算してみた
ドルコスト平均法は、異なる時点で一定金額を買い付ける手法であり、その際の購入量は一定金額÷資産価格で求められます。

計算によって、この購入量もまた、対数正規分布に従うことがわかります。

数式で書くと、時点\( t\)において資産価格が\( S_t\)だったときに、一定額\( A\)を投資したときの購入量\(Q_t \)は、以下のように表すことができ、これは対数正規分布に従います。

\[ \begin{split} Q_t=\frac{A }{S_t }=\frac{ A}{ S_0}e^{-(\mu-\frac{ 1}{ 2}\sigma^2)t-\sigma W_t}\end{split} \]

ただし、\( \mu\)は資産の期待リターン、\( \sigma\)はリスク、\( W_t\)は正規分布に従う確率変数です。

さて、ドルコスト平均法によった場合、購入は何度かに分かれて行われるため、最終的な投資量は各回の購入量の和、すなわち対数正規分布の和になります。
対数正規分布の和は、数式で簡潔に表現することができません。
参考記事>>対数正規分布の和、幾何ブラウン運動の和、リスク資産ポートフォリオ
正規分布であれば、正規分布の和は再び正規分布になり、簡潔に表現することができますが、対数正規分布の和は扱いやすい確率分布にはなりません。
したがって、確率論を使ってドルコスト平均法の定量的な議論を行うのは難しくなります。
もちろん、資産価格が対数正規分布に従わない別のモデルを考えればこの限りではありませんが、いずれにせよ、確率論で扱うような簡潔な形で扱うのは難しく、これがドルコスト平均法の検証が困難な理由です。

まとめ

ドルコスト平均法は簡単に実施できる投資法として人気ですが、その検証は簡単ではありません。
データに依存しますし、確率論の道具を使うことができないからです。
これらを踏まえ、ドルコスト平均法の検証には、シミュレーションが有効なのではないかと考えています。
近く、シミュレーションを用いたドルコスト平均法の検証をしてみたいと思います。

ビットコインの確率分布について|期待リターン、リスク、ヒストグラム【正規分布じゃない】

こんにちは、毛糸です。

前回、Rライブラリ「crypto」を用いて、仮想通貨の価格が簡単に取得できることを説明しました。
>>仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方

今回は「crypto」を使って取得したBitcoin(BTC)の価格情報を分析します。

BTC価格の時系列データを分析することで、BTCの期待リターン、リスクが極めて高いことがわかりました。

また、ヒストグラムと「正規性の検定」により、BTCのリターンは正規分布に従わないこともわかりました。

cryptoパッケージによるBTC価格の取得とリターンのデータ

cryptoパッケージのcrypto_history()関数を用いて、BTC価格のヒストリカルデータを取得します。
>>仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方

#crypto_history(coin = NULL, limit = NULL, start_date = NULL,
#end_date = NULL, coin_list = NULL, sleep = NULL)
#仮想通貨の価格等情報を取得
#dateはyyyymmdd形式で。NULLとすると最長期間
BTC<-crypto_history(coin = "BTC",
                    start_date = NULL,end_date = NULL)
BTC価格を時系列データとして読み込みます。
BTC_price<-ts(BTC$close,start=BTC$date[1])
plot(BTC_price,type="l")
日次収益率を計算し、プロットしてみましょう。
#日次収益率
BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1)
plot(BTC_return_daily,type="l")
以下ではこの日次収益率データを使って、BTCの収益率の統計分析をしていきます。

基本統計量

期待リターン(平均)

日次収益率の平均をとることで、日次期待リターンを推定できます。結果は、日次リターンが0.28%、簡易的に年率換算すると102%となりました。株式のリターンが年率5%ほどと言われていますから、驚異的な水準です。
#日次収益率の平均(期待リターン)(%)
mean(BTC_return_daily)*100
#[1] 0.2808807
#年率換算(%)
mean(BTC_return_daily)*100*365
#[1] 102.5215

リスク(標準偏差)

日次収益率の標準偏差を計算することで、日次収益率のリスクを推定できます。結果は、日次ベースの標準偏差が4.3%、簡易的に年率換算すると82%となりました。株式のリスクが年率25%ほどと言われていますから、とてつもなくハイリスクであることがわかります。
#標準偏差(%)
sd(BTC_return_daily)*100
#[1] 4.333606

#年率換算(%)
sd(BTC_return_daily)*100*365^0.5
#[1] 82.79343

歪度

歪度と尖度の計算には、「moments」ライブラリのskewness()、kurtosis() 関数を用います。
install.packages("moments")
library(moments)

分布の歪み具合を示すのが歪度です。正規分布のように左右対称な分布では、歪度は0になります。

BTC日次収益率の歪度は0.5です。歪度が正であるということは、分布のピークが左側にあり、右側の裾が広い分布であることを意味します。つまり、極端に高いリターンが出やすいと言えます。

#歪度:正規分布は0、正なら右裾が広い
skewness(BTC_return_daily)
#[1] 0.5234792

尖度

尖度は分布の尖り具合を示します。正規分布は尖度3(0とする定義もあり)であり、これより大きければ、分布は平均の周りで尖った、左右に裾野が広い分布になります。

BTC日次収益率の尖度は12であり、正規分布より極端に「尖った」、そして「裾野の広い」分布になります。つまり、極端に高い・低いリターンが出現しやすいことを意味します。

#尖度:正規分布が3
kurtosis(BTC_return_daily)
#[1] 12.9556

BTC収益率(リターン)は正規分布にしたがうか?(正規性の検定)

ファイナンス(金融工学)では、資産のリターンは正規分布に従うと仮定されることが多いです(資産価格が対数正規分布、資産価格が幾何ブラウン運動、も同様の意味です)。
BTC収益率は正規分布に従うのか、確かめてみましょう。
すでに、BTC収益率の歪度が0.5(正規分布なら0)、尖度が12(正規分布なら3)であることは確認しましたので、正規分布ではないような気がしますが、別の視点からも確認します。
本性の内容は下記記事を参考にしています。

ヒストグラム

リターンの実現値が、どの範囲でどのくらいの頻度で出現したかを見るグラフが、ヒストグラムです。

BTC日次収益率のヒストグラムを描いてみます。

正規分布のヒストグラムは左右対称のベルのような形をしていますが、BTC収益率のヒストグラムはやや右に裾野が厚く、かつ裾野が広がっている印象を受けます。

hist(BTC_return_daily,main="BTC算術日次リターンのヒストグラム",xlab="日次リターン",ylab="度数")

Q-Qプロット

Q-Qプロットは、与えられたデータがある確率分布とどれくらい「ずれているか」を図示したものです。データをQ-Qプロットしたとき、データが45度線(y=xのグラフ)に沿って並んでいれば、理論上の分布と近いという根拠になります。Rではqqnorm()関数によって、正規分布を仮定した場合のQ-Qプロットを描画できます。

BTCの日次データをQ-Qプロットしてみると、以下のように曲線を描いており、正規分布に近いとは言えません。

qqnorm(BTC_return_daily,main="BTC算術日次リターンのQ-Qプロット")

シャピロ・ウィルク検定

シャピロ・ウィルク検定は、「データが正規分布に従う」という帰無仮説に関する検定です。したがって、シャピロ・ウィルク検定で計算されたp値が小さければ、帰無仮説を棄却、つまり「データは正規分布に従わない」ということが言えます。Rではshapiro.test()を使います。
検定の結果、p値はほぼ0であり、「BTC日次収益率は正規分布に従わない」と結論付けられます。
> shapiro.test(BTC_return_daily)


 Shapiro-Wilk normality test


data:  BTC_return_daily
W = 0.87881, p-value < 0.00000000000000022

コルモゴロフ・スミルノフ検定

コルモゴロフ・スミルノフ検定は、「データが指定した確率分布に従う」という帰無仮説に関する検定です。したがって、正規分布に関するコルモゴロフ・スミルノフ検定を行ったときにp値が小さければ、帰無仮説を棄却、つまり「データは正規分布に従わない」ということが言えます。Rではks.test()を使います。
検定の結果、p値はほぼ0であり、「BTC日次収益率は正規分布に従わない」と結論付けられます。
> ks.test(BTC_return_daily, "pnorm", mean=mean(BTC_return_daily), sd=sqrt(var(BTC_return_daily)))


 One-sample Kolmogorov-Smirnov test


data:  BTC_return_daily
D = 0.11752, p-value < 0.00000000000000022
alternative hypothesis: two-sided


 警告メッセージ: 
 ks.test(BTC_return_daily, "pnorm", mean = mean(BTC_return_daily),  で: 
   コルモゴロフ・スミノフ検定において、タイは現れるべきではありません
なお、警告メッセージは同一データが存在するときに発生します。連続確率分布では同一の値が実現する確率は0なので、本来生じるべきではないというアラートですが、今回は厳密な議論をしているわけではないので、スルーします。
以上のような検討の結果、いずれの方法でも、BTC日次収益率は正規分布に従わないという結論が得られました。

ビットコインの収益率が正規分布に従わないとなにが困るか

ビットコインの収益率が正規分布に従わないということは、収益率が正規分布に従うと仮定して展開される多くのファイナンス理論の道具が使えないことになります。
たとえば、オプションの価格公式であるブラック・ショールズ式は、資産価格が幾何ブラウン運動に従うこと(つまり収益率が正規分布に従うこと)を仮定しています。
したがって、ビットコインのオプションが組成されたときに、そのオプションの価格をブラック・ショールズ式で評価するのと、意思決定を誤ります。
また、将来の投資運用の成績をシミュレーションする「投資シミュレーションプログラム」も、資産の収益率に正規分布を仮定しているため、仮想通貨投資には利用できません。

このように、確率分布が標準的なファイナンスの仮定と異なることにより、やや慎重な議論が必要になってきます。

投資においては、為替や株式等よりも変動性が大きく、また極端に高いもしくは低いリターンが出やすいという点に気をつける必要があります。

まとめ

Rライブラリ「crypto」を用いて、ビットコインの価格情報を取得し、日次リターンの分析を行ってみました。
ビットコインの収益率は極めてハイリスク・ハイリターンであり、また、ファイナンスで通常仮定される正規分布とは大きく異なる性質を持っています。

ビットコインを始めとする仮想通貨のデータを扱う際には、この分布の特性をよく踏まえる必要があります。

関連記事>>ビットコインはバブルである

参考記事


データ解析その前に: 分布型の確認と正規性の検定 #rstatsj(リンク)
Leihcrev’s memo 入門本編 8章 確率分布(リンク
統計解析フリーソフト R の備忘録頁 ver.3.1 63. 正規性の検定(リンク)
Wikipedia 歪度(リンク
Wikipedia 尖度(リンク
Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/bzb-functions.php on line 299

Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/bzb-functions.php on line 301
class="col-md-4" role="complementary" itemscope="itemscope" itemtype="http://schema.org/WPSideBar">