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

EXCELマクロという資産

Excelマクロは資産です。

それはなにも「この経験はきっと人生を豊かにするんだ」的な意味ではありません。明確な意味があります。

この記事ではマクロがなぜ資産なのか、マクロ資産を作る際に気をつけるべきポイントについてお話します。
続きを読む

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}

クロネコヤマトとP≠NP予想

こんにちは、毛糸です。

先日、こんなつぶやきが話題になりました。

このツイートのなかで「NP困難」という言葉が使われています。

調べてみると、この話題は「P≠NP予想」という数学の未解決問題に関係する話であることが分かりました。
本記事ではクロネコヤマトのプログラミングコンテストに関連する「計算理論」という数学の概念を概観し、このプログラミングコンテストがどんな問題に挑戦するものなのか、P≠NP予想という未解決問題とどんな関係があるのかについてまとめます。

なお、直感やイメージを大事にするために、数学的な厳密さを欠く部分がありますので、詳しく勉強したい方はテキスト等を参照してください。

計算理論とはなにか

NP困難という用語は、計算理論という数学の一分野における用語です。
計算理論とは「計算」を数学的に定式化し、コンピュータのような計算機と、計算機による計算手順(アルゴリズム)について考えることで、ある問題が「計算」可能かどうか、可能であるならそれはどの程度複雑なのか、といった問題を扱う分野です。
ある計算がどの程度複雑なのかという問題は、計算複雑性理論と呼ばれています。
計算複雑性理論では、データが\(n \)個与えられたときに、計算量が\( n\)と比べてどれくらいの大小関係なのか、ということを考えます。
たとえば、ばらばらに並べられた\(n\)個の自然数を昇順に並べる場合に、
隣どうしの数字の大小を比較して、昇順に並び替える
という手順(アルゴリズム)を考えたとき、並び替えの回数は\(n(n-1)/2\)回を超えることはないということがわかります。
これは「おおよそ」\(n^2\)と同程度の複雑さと考えることができます(これくらいのアバウトさでも十分意味のある分析になります)。

このように、計算複雑性理論では、データ数に関連してその複雑性を定量な尺度で評価します。

多項式時間アルゴリズムとクラスP、クラスNP

あるアルゴリズムがデータ数との関連でどれだけ時間がかかるか、という問題を考えたとき、ある多項式で表せる時間以内で解けるようなアルゴリズムを、多項式時間アルゴリズムといいます。

>>多項式時間-Wikipedia

多項式時間で解けるといったときには、解くための時間が天文学的な数字にはならない(現実的な計算時間に収まる)と考えてよいでしょう。
多項式時間アルゴリズムで解ける問題は、クラスPと呼びます。

また、ある問題の答えが「yes」だとわかったとき、それが本当に正しいのかを多項式時間で判定できる問題を、クラスNPと呼びます。

>>NP-Wikipedia

ある問題がNPである、といったときには、その問題の答えが与えられたときに、膨大な計算を要さずに答え合わせができる、と考えてよいでしょう。

NP困難な問題と巡回セールスマン問題

NPに属する問題(多項式時間で答え合わせができる問題)と同等、もしくはそれ以上に難しい問題を、NP困難な問題といいます。

NP困難な問題は、その検証に膨大な計算を要する場合があります。

NP困難な問題として有名なものに「巡回セールスマン問題」というのがあります。
巡回セールスマン問題とは、いくつかの目的地を巡回するセールスマンが、もっとも短い移動距離を達成するには移動したらよいか、を考える問題です。

巡回セールスマン問題はNP困難、つまり多項式時間では解けない複雑な問題であるということです。

ヤマト運輸プログラミングコンテスト

冒頭でとりあげたヤマト運輸は、AtCoderというプログラミングコンテストサイトで、巡回セールスマン問題と思われる問題を出題しています。

ヤマト運輸プログラミングコンテスト2019

その問題の概要は以下のとおりです。

本コンテストでは、私たちの取り組む課題の一つとして「宅配ドライバーの配達ルートの効率化」をテーマとして取り上げ、配達ルートの最適化問題を含む2問を出題いたします。

配達ルートの最適化という言葉から類推するに、ヤマト運輸の出題する問題はおそらく巡回セールスマン問題に何らかの実際的な制約を課した問題なのでしょう。
ヤマト運輸はこの問題の良い解決策が得られれば、彼らの物流ビジネスの効率化につながります。
しかし、巡回セールスマン問題は多項式時間では解けそうにない(計算量が膨大になる)問題ですので、ヤマト運輸の課題も、解くのは容易ではないと予想されます。

なお、このヤマト運輸はこのプログラミングコンテストについて、著作権を譲渡することを求めており、これがちょっとした批判の的になってるようです。

P≠NP予想

計算複雑性理論には、数学上の未解決問題が残されています。
それが「P≠NP予想」です。
P≠NP予想はクレイ数学研究所のミレニアム懸賞問題の一つとして100万ドルの懸賞金がかけられた未解決問題で、
クラスP(多項式時間で判定できる問題)とクラスNP(多項式時間で答え合わせができる問題)とは一致しない
という予想です。
>>P≠NP予想-Wikipedia
「PならばNP」(判定できるなら答え合わせができる)は真なので、PはNPに含まれる(P⊆NP)ことはわかります。
しかし、PだけれどもNPでないような問題があるかどうか(つまりPはNPの真部分集合になるか、多項式時間では判定できないけど答え合わせならできる問題があるか)はまだ誰も証明したことがなく、未解決の問題となっているのです。

まとめ

計算理論における、多項式時間やクラスP、NPといった用語をまとめながら、NP困難な問題である巡回セールスマン問題とヤマト運輸のプログラミングコンテストの内容について説明しました。
この分野においては「P≠NP予想」という数学上の未解決問題があります。
ヤマト運輸のプログラミングコンテストでP≠NP予想が解決できるわけではありませんが、計算理論の「実践」のすぐ近くに、数学の未解決問題があるというのは、ロマンを感じませんか。

参考文献

本記事の内容(計算理論やアルゴリズム、P≠NP予想)に興味を持たれた方は、下記書籍が大変参考になります。読み物としても数学書としても楽しめる名著です。

積立投資をシミュレーションするプログラムを作った(投資シミュレーションプログラム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])

 

まとめ

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

仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方

こんにちは、毛糸です。

仮想通貨に再び注目が集まっています。

2017年に価格が高騰し、2018年に暴落した仮想通貨は、現代のバブルとして一躍有名になりました。
参考記事:ビットコインはバブルである

仮想通貨に関しては、その価格変動の激しさから、投機の対象ともなっていますが、適切にリスク管理しないとあっという間に資産が溶けてしまいます。
本記事では再び注目が集まっている仮想通貨に関して、統計プログラミング言語Rによる価格データの簡単な取得方法について解説します。

仮想通貨パッケージcryptoをインストールする方法

Rはライブラリと呼ばれるプログラム・パッケージを利用することで、専門的な分析を簡単に行えるようになります。
仮想通貨の価格分析をするにあたっては、cryptoパッケージが役に立ちます。
cryptoパッケージに内蔵されている関数を用いることで、仮想通貨の価格情報を簡単に取得できます(公式マニュアルPDFはこちら)。
cryptoパッケージを利用するにはお使いのPCにRがインストールされている必要がありますので、下記を参考にして環境を整えてください。

仮想通貨価格の時系列データ(ヒストリカルデータ)の入手方法

まずはじめに、cryptoパッケージ(と付随して必要な他のパッケージ)をインストールします。
Rのコンソール画面に以下のコードを入力し実行します。
install.packages("crypto", dependencies = TRUE)
しばらくの間、各種パッケージのインストールが進みます。
インストールが進んだら、cryptoパッケージを読み込みます。
library(crypto)
これでcryptoパッケージに内蔵される各種関数が使用可能になりました。
たとえば、仮想通貨のリストを入手するには、以下のコードを実行します。
#仮想通貨のリストを表示
crypto_list()
出力結果は以下のようになります。
> #仮想通貨のリストを表示
> crypto_list()
# A tibble: 2,212 x 6
   symbol name     slug      rank exchange_url                history_url                           
   <chr>  <chr>    <chr>    <dbl> <chr>                       <chr>                                 
 1 BTC    Bitcoin  bitcoin      1 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 2 ETH    Ethereum ethereum     2 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 3 XRP    XRP      ripple       3 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 4 BCH    Bitcoin… bitcoin…     4 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 5 EOS    EOS      eos          5 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 6 LTC    Litecoin litecoin     6 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 7 BNB    Binance… binance…     7 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 8 BSV    Bitcoin… bitcoin…     8 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 9 USDT   Tether   tether       9 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
10 XLM    Stellar  stellar     10 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
# … with 2,202 more rows

ビットコイン(BTC)の価格データからリターンとリスクを計算する

実際にデータを分析してみましょう。

ヒストリカルデータの取得

crypto_history()関数で、指定した仮想通貨の時系列価格情報を取得できます。
#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_saikin<-crypto_history(coin = "BTC",
              start_date = "20190501",end_date = "20190530")
head()関数、tail()関数で、データの先頭と最後尾を確認できます。
#データの先頭
head(BTC,1)
#データの最後尾
tail(BTC,1)
crypto_history()で取得される情報は、時点の情報や始値、終値など、いくつかの列から構成されています。
それぞれの情報にアクセスしたければ、たとえばBTC$closeのように$マークのあとに取り出したい列のラベルを指定します。

終値を時系列データとして抽出

今回使うのはBTCの終値closeです。関数ts()にデータを入れることで、時系列(time series)データとして扱うことが出来ます。
#BTCの終値情報を時系列として取り出す。
#時系列情報の開始日をBTC$date[1]と指定
BTC_price<-ts(BTC$close,start=BTC$date[1])

価格チャート

BTC価格のチャートを描いてみます。データの図示にはplot()関数を使います。
#type="l"は線グラフ
plot(BTC_price,type="l")

BTCの日次収益率(リターン)

日次収益率を計算します。
t日目のBTC価格を\( P_t\)、収益率を\( r_t\)と表すと、
\[ \begin{split}r_t=\frac{ P_{t}-P_{t-1}}{ P_{t-1}} \end{split} \]
と計算できます。
分子は1時点前との差額を計算するdiff(_,lag=1)関数、分母は1時点前の価格を返すlag(_,k=-1)関数を用いて計算できますので、BTCの日次収益率は以下のようにして求めます。
#日次収益率
BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1)
plot(BTC_return_daily,type="l")

BTCリターンの平均と標準偏差(リスク)

日次収益率の平均はmean()関数を用いて計算できます。
mean(BTC_return_daily)*100
#[1] 0.2808807
#表示は%
#年率換算では
mean(BTC_return_daily)*100*365
#[1] 102.5215
BTCの日次平均リターンは0.28%(年率換算102%)でした。この値はデータ期間によって変わります。

標準偏差はsd()関数で計算できます。

sd(BTC_return_daily)*100
#[1] 4.333606
#表示は%
sd(BTC_return_daily)*100*365^0.5
#[1] 82.79343
リスクを示す標準偏差は日次で4.33%、年率換算82.79%でした。極めてハイリスクです。

まとめ

Rパッケージcryptoを用いて仮想通貨の価格を用意に取得できることを説明しました。
今後このデータを用いて、仮想通貨に関する統計分析をシリーズでお送りする予定です。
もし面白いと思っていただけたら、SNSでのシェアをよろしくお願いします。

「投資シミュレーションプログラム」サマリー(随時追加)

こんにちは、毛糸です。

本記事は「投資シミュレーションプログラム」に関する記事のまとめページです。

「投資シミュレーションプログラム」とそれを使った各種の分析について、このページから各記事に飛ぶことが出来ます。

投資シミュレーションプログラム

投資シミュレーションプログラムVer.1.0

投資シミュレーションプログラムVer.1.0のコード例と、投資シミュレーションプログラムが用いている「モンテカルロ・シミュレーション」に関する説明は下記ページです。
>>投資シミュレーションプログラムを作ってみた【Rでプログラミング】

投資シミュレーションプログラムVer.1.1

投資シミュレーションプログラムは何千何万という膨大な数のシナリオをコンピュータの圧倒的計算力で処理するプログラムですが、Ver.1.0ではサンプルの計算をfor文を用いて行っていました。

統計プログラミング言語Rはfor文による繰り返し計算よりベクトル演算の方が高速に処理することができ、これを実装したのがVer.1.1です。
>>投資シミュレーションプログラムを高速化してみた

活用例

年金の分析

投資シミュレーションプログラムを用いて、年金積立金のポートフォリオの将来予測を行っています。積立金の100年後の状況を予測したり、1年後に損失が生じる確率が35%あることなどが明らかになりました。
今後、運用期間中に資金が出入りするような、より現実的な仮定のもとで分析を行う予定です。

FX・外貨預金の分析

FXの期待リターンの理論値を計算したうえで、それをパラメタとして投資シミュレーションプログラムを使い、FXで億り人になれる確率や破産する確率を計算しました。

レバレッジが億り人になれるキーであることが明らかになりましたが、破産確率の上昇と隣合わせであることもわかりました。
>>FXの期待リターン、億り人になれる確率、破産する確率【モンテカルロ・シミュレーション】

インデックス投資の分析

資産運用の王道、インデックス投資について、投資シミュレーションプログラムを用いた将来予測を行う予定です。

投資シミュレーションプログラムを支える技術

投資シミュレーションプログラムは、3つの技術と知識によって支えられています。
  1. 確率論・統計学
  2. ファイナンス理論(金融工学)
  3. プログラミング言語
投資シミュレーションプログラムは、確率論における「大数の法則」によって正当性が保証される「モンテカルロ・シミュレーション(モンテカルロ法)」により、将来の予測値を計算しています。
分析の対象は投資であり、金融商品です。金融商品の性質や運用戦略の策定については、ファイナンス(金融工学)の分野において知見が蓄積されています。
投資シミュレーションプログラムにおける実際の計算はコンピュータが行いますので、必然的にプログラミングのスキルが必要になります。投資シミュレーションプログラムは統計プログラミングRを用いて作成されています。
ファイナンスにおけるモンテカルロ法の活用については、下記の書籍が大変役に立ちます。

統計プログラミング言語Rによるファイナンス分析に関しては、下記書籍を読めば、Rの基本的な使いかたから、本格的な分析までを学ぶことが出来ます。

 

勉強会「意識高い……」「レベル高そう……」いやいや、誤解してませんか?

こんにちは、毛糸です。

このところ毎月のように勉強会を企画したりしているのですが、先日「意識が高い」「近寄りにくい雰囲気」という声を耳にしました。

私はそういう声にはあまり気持ちを乱されないタイプですが、しかしそういうイメージを持たれるのは本意でなく、誤解であると感じているため、今回はそういった声に対するメッセージをお届けします。

私はなぜ勉強会を開いたか

私は昨年のプログラミングブームの中で、自分と同じようにテクノロジーを学ぶ人達と交流したいという思いで、勉強会を企画しました。

当時の私はプログラミング言語Pythonに興味を持っていました。

日頃、会計士として仕事をしていますので、Pythonを会計の仕事に役立てられないかと考え、会計×テクノロジーの勉強会 PyCPAを立ち上げました。

PyCPAという勉強会は昨年の発足以来、10回以上の開催実績があり、参加者も述べ250人を超える規模となりましたが、最初はプログラミングに興味のある会計士ツイッタラーを集めた小規模な集団でした。

会計とテクノロジー(プログラミング)という、ある種「オタク」な趣味を共有するために、SNSで仲間を募り集まってみた、とうただそれだけの勉強会です。

PyCPAという勉強会は、これまで色々な形式で開催されてきました。

  • ただ集まって各自黙々と作業を行うもくもく会
  • 講師を招き実務の最先端を学ぶセミナー
  • 実際にプログラミングをしながら学ぶハンズオン
  • 専門書をみんなで読み進めていく輪読会
などなど、多彩なバリエーションで開催しています。
勉強会は完全無償で運営されており、会場の提供や講師の登壇まで、すべで勉強会のビジョンに共感して下さる方々の善意で成り立っております。

勉強会に対する誤解

そんな勉強会PyCPAですが、最近「意識が高い」「レベルが高くて近づきがたい」という声をちらほら耳にするようになりました。
前述の通りPyCPAは、Twitterに生息する一部の「オタクな」会計士による趣味の集まりとして発足しました。
今でこそ多くの支援者に恵まれ、コミュニティとしての輪郭を備えつつありますが、「楽しさを探求する」というあり方は、当初から全く変わっていません。
意識の高さを志向しているようなことはまったくなく(おそらくコミュニティメンバーもそれを望んでおらず)、ただ楽しいから・知りたいからと言う理由で、探求し発信しています。なので、
なに意味わからんこと追い求めてるんだあいつら……
という方向で近寄りがたいのならよくわかりますが、
なんかレベル高いことやってるよ意識たかっ……
と思ってるなら、それは大きな誤解です。
もちろん、会計やテクノロジーに興味を持ち探求することを楽しむ人種が世の中の多数派だとは思っておりませんので、そういう意味では「尖った」集団であることには間違いないのですが、もし「意識高い」奴らと映っているのであれば、それはこのコミュニティの本質を十分理解いただいていないということでしょう。

やりたいからやる、楽しいから学ぶ

私の周りには、私の興味ある話題について話を深められる人があまりいません(私の交友関係の狭さゆえです)。
私が気になる、AIの新技術とか、正規分布の和とか、簿記の代数的構造とか、そういう話題を一緒に楽しめる人が近くにいないのです。
しかしSNSは違いました。
SNSではどんなにニッチな趣向でも、広く発信すれば必ずと言っていいほど共感してくれる人が現れます。
SNSの広がりによって、リアルな人脈を超えた人間関係が構築できるようになりました。
こうしたネットでのつながりをリアルに感じたい、同じ志を持ち共通の話題を楽しめる人たちともっと交流したい、そういう気持ちが勉強会を企画する原動力になりました。
やりたいからやる、楽しいから学ぶ。
そうした娯楽を一緒に楽しめる仲間が、勉強会に集まっています。
そこにあるのは決して意識の高いインテリジェンスな集団ではなく、ちょっと変わったことに興味を持つ人たちが集まる探求の場なのです。

まとめ

「意識高い」「近寄りにくい」という声が、私たちの勉強会を形容する言葉としてはちょっとずれていると思い、考えていることを述べました。
私たちの勉強会は、ただ楽しいから集まり、知識を共有しているだけです。
もし「レベルが高くて……」と遠ざけてしまっている方がいたら、それは大きな誤解です。

PyCPAで登壇する人たちだって、最初はみんな手探りで学んでいたのです。

もし、今まで勉強会なんて行ったことも開いたこともないけれど、興味があるという方がいらっしゃったら、勉強会に足を運んでいただくか、こんな勉強会を開きたいとリクエストしてみてください。
参考記事:PyCPAで勉強会を開催する、もしくはリクエストする方法

どうせ楽しむなら、話のわかる人と一緒にやったほうが楽しいのです。

一緒に楽しく学びませんか。

PyCPAリアル・オプション輪読会まとめと参加者アンケート結果

こんにちは、毛糸です。

先日、会計×テクノロジーをテーマとした勉強会コミュニティPyCPAの『モンテカルロ法によるリアル・オプション分析』輪読会第1回が開催されました。

今回は20名近い参加者にお集まりいただきました。

本記事では今回の輪読会の振り返りをしてみたいと思います。

参加者には事前にアンケートにお答えいただいてますので、その結果もあわせて公開します。

PyCPAとは

PyCPAは、テクノロジーの進化を武器に次世代の担い手となる探求者たちのコミュニティです。

もともとは、プログラミング言語Pythonに関心のある公認会計士(CPA)の勉強会として発足しましたが、現在ではより広く、テクノロジー全般に興味を持ち、探求する意欲のある、会計士、経理財務人材、エンジニアなどがメンバーとなって活動しています。

PyCPAは毎月勉強会を開催しており、もくもく会やセミナー、参加型ワークショップを行っています。

現在のコミュニティメンバーはSlack登録者ベースで170名ほど、2019年5月現在の勉強会の累計参加者は250名を超えます

PyCPAコミュニティと勉強会への参加は無料となっており、運営事務、会場確保、講師の登壇等はすべて、コミュニティのビジョンに共感していただいている組織・個人のボランティアでなりたっています。

PyCPAにコミュニティメンバーとして参加したい方はPyCPAのSlackにご登録ください。

ツイッターでのPyCPAコミュニティメンバーのやり取りは、こちらからご覧いただけます。

リアル・オプション輪読会の概要

今回の勉強会は初の輪読会となりました。

輪読会とは、複数人で同じ本を読み進め、集まって内容を共有し、理解を深める方法です。

今回の輪読会で取り組んだのは『モンテカルロ法によるリアル・オプション分析』という専門書です。


この本は、ファイナンス(金融工学)とプログラミング(ExcelVBA)を用いて、経営意思決定の柔軟性が創出する価値=リアル・オプションを定量的に評価する手法が学べる本です。
参考記事:『モンテカルロ法によるリアル・オプション分析』内容の概説、こんな人におすすめ、いい点と注意点

本書はリアル・オプションを学ぶとても良い題材である一方で、なかなか難易度の高い本だったので、輪読会の題材にしました。

今回は初回ということで、輪読会の目的や進め方について説明しました。
参考記事:【開催前夜】リアル・オプション輪読会の目的、理由、進め方

輪読は第1章を扱いました。

第1章はプログラミング言語ExcelVBAの基礎で、テキストに書かれたコードを入力しながら参加者全員で読み進めました。

VBAの始め方や、変数や関数の定義、for文やDoWhile文などの基本構文、配列の使いかたなどについて学びました。

途中、ファシリテーターから「このコードはモンテカルロ法のこんなシーンで役に立ちます」「この構文は株価シミュレーションの計算で使います」というような解説をはさみながら進めました。

進度を合わせて読み進め、コードも入力しながらということでしたので、理解にばらつきが出るかな?と恐れていましたが、みなさん思いの外つまづくことも少なく、理解度、満足度ともに高かったように思います。

感想とフィードバック

予習について

全員でコードを入力しながら、さくさくと読み進めたので、ちょっと駆け足気味になりました。

この点に関して、参加者から「次回は予習して来ようと思った」という声が上がりました。

事前に準備をしてくれば、輪読会をより意義深いものにできそうです。

バグについて

事前に予習してきた方も、その場でコードを入力した人も、みなさんバグ=プログラムが動かない問題に悩まされていました。

しかし、参加者のひとり(エンジニア)の方から「バグは出るもの、人は完璧じゃない、能率的にバグがとれればOK」という前向きな意見が出て、参加者の気持ちも楽になったように思います。

プログラミングにはバグがつきものですので、輪読会のように他の人と助け合える環境で学習を進めるのがよいと思います。

練習と実践について

プログラミングは一度勉強しても、使わなければすぐ忘れてしまう、という感想が出ました。

たしかに、人は忘れる生き物ですから、どんなに勉強しても使わなければ忘れてしまいます。

もし勉強したことを忘れたくないのであれば、お仕事で使うなり、勉強会で披露するなりして、知識の維持に努める必要がありそうです。

参加者アンケート結果報告

PyCPA リアル・オプション輪読会第1回参加者には、事前に以下のアンケートにお答えいただいています。
  • 参加者の所属
  • 参加理由
  • 意見・感想・提案など
その回答状況を見ていきましょう。

参加者の所属

PyCPAは会計士の勉強会として発足したこともあり、会計士等の比率が一番多い結果となりました。

次いで一般事業会社(経理財務系)の方、金融機関勤務と続きます。

輪読会の内容がプログラミングであったため、エンジニアの方の存在感はとても大きかったです。

会の最後にMVPを決めたのですが、AI開発がご専門のプログラマの方が絶大な支持を得て見事MVPを獲得されました。

参加理由

リアル・オプション輪読会の参加理由は、金融工学、ファイナンスへの関心が首位、次いでリアル・オプション、企業価値評価への関心となっています。

みなさんお仕事で金融・ファイナンスに関わりがある方がほとんどで、その理解を深めたいという方が大多数でした。

リアル・オプションという経営意思決定のためのツールを学びたいという、このテキストの目的ど真ん中のかたもたくさんいらっしゃいました。

ファイナンスにせよ、VBAプログラミングにせよ、このテキストはとてもよい教材になりますので、是非チャレンジしてほしいと思います。

参考記事:『モンテカルロ法によるリアル・オプション分析』内容の概説、こんな人におすすめ、いい点と注意点

意見・感想・提案など

自由回答で寄せられた意見等についてまとめます。

まったく門外漢ですが、なにか楽しそうだと思いました

モンテカルロ法という言葉ぐらいしか知らないので、その内容を理解したい

私も最初はそうでした。

モンテカルロ法という何やら凄い技術があるらしい、なんか楽しそう。

そういう興味が人生を豊かにしてくれると信じています。

一緒に楽しみましょう。

将来的に転換社債のプライシンクモデルを作りたいです!

業績連動型のストックオプション

モンテカルロ法は金融商品評価の強力なツールで、その応用範囲は膨大です。

輪読会での学びをきっかけに、よりアドバンストな内容に挑戦してみるのもいいでしょう。

意思決定にどう活かすのかに興味があります。

リアル・オプションは経営意思決定のツールとして有用です。

単に本を読み、ふーん、そういう手法があるのね、で終わらせることなく、是非輪読会で他の方とディスカッションすることで、ビジネスへの応用について探っていきましょう。

私もとても楽しみです。

まとめ

PyCPA リアル・オプション輪読会の振り返りについて述べました。

徐々にその裾野を広げつつ、コミュニティとしての輪郭を備え始めたPyCPAですが、まだまだ始まったばかりです。

みなさんの学ぶ意欲と発信で、一緒に楽しみましょう。

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">