金融と工学のあいだ

興味関心に関するメモ(機械学習、検索エンジン、プログラミングなど)

AWSでWebサーバーを立ててみた(2)

CGIを動かす

CGIとは[1]

ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。

チュートリアル[2]

  • sudo vi /etc/httpd/conf/httpd.conf
  • 下記が書いて有ることを確認
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
  • 上記フォルダにperlのコードを置く
$ cat /var/www/cgi-bin/test 
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
  • 全ユーザに実行権限を渡す

リンク

[1] Common Gateway Interface - Wikipedia

[2]Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ バージョン 2.2

AWS上でTensor FlowのUdacityのチュートリアルを動かす

背景

  • 自宅にメモリ8G以上あるLinuxマシンがないのでマシン買わないといけにかなと考えていた。
  • よくよく考えると、AWSとかで使用するときだけインスタンス作ればいいな!ということで、やってみることにした。

目的

手順

インスタンス作成

  • awsで8G以上のインスタンスを作る(無料プランじゃないのでどれくらいかかるのか計算した所、1時間1ドルもかからないよう。)
  • Led Hatでつくった。
  • sshでログインできることを確認。
  • 任意の8888番ポートに対するTCPアクセスを許可

Dockerのインストール

Tensor Flowのコンテナの展開

sudo docker run -p 8888:8888 --name tensorflow-udacity -it gcr.io/tensorflow/udacity-assignments:0.6.0
  • http://{hostname}:8888 でアクセス f:id:kumechann:20161119130502p:plain

リンク

github.com

docs.docker.com

AWSでwebサーバーを立ててみた

目的

  • webサーバーを立てたことがないので立ててみる
  • ついでに色々動かして遊んで見る

手順

  • リンクの1に従って作業する。

ネットワーク設定

VPC作成

  • [VPCの作成]で作成

サブネット作成

  • [サブネット]->[サブネットの作成]でサブネットを作成
  • この時、10.0.1.0/24をwebサーバーを置く、publicなサブネットワークとして作成

インターネット接続

  • 上記vpcにインターネットを接続する

ルーティング情報を設定

サーバ設定

インスタンス作成

ssh接続

ファイアウォール設定

  • インバウンドルールでHTTPによるポート80のアクセスを許可

調べたこと

VPCとは

  • Amazon Virtual Private Cloud のこと

    独自の IP アドレス範囲の選択、サブネットの作成、ルーティングテーブルとネットワークゲートウェイの設定など、仮想ネットワーク環境を完全にコントロール

VPC作成したらいろんな項目が出てきた

  • CIDR
    • Classless Inter-Domain Routingのこと。

      Classless Inter-Domain Routing(CIDR、サイダー)は、インターネット上のルーターにおけるルーティングテーブルの肥大化速度を低減させるための機構であり、ISPや組織にクラスA、B、Cを全部ではなく部分的に割り当てることでIPアドレスの浪費を防ぐ機構である。CIDR記法でアドレスを記述でき、アドレスの集約的表現が可能で、アドレスブロックの委譲も容易である。

  • DHCPオプションセット
    • デフォルトでは、デフォルトではない VPC 内のすべてのインスタンスが、AWS によって割り当てられた解決できないホスト名を受け取ります (ip-10-0-0-202 など)。
    • インスタンスに独自のドメイン名を割り当て、独自の DNS サーバーのうち 4 台までを使用できます。そのためには、特別な DHCP オプションセットを指定する必要があります。
  • ルートテーブル
    • 各サブネットのルーティングに関するルール
  • ネットワークACL
  • デフォルトVPC
    • すぐにインスタンス作成可能なデフォルト設定のVPC
    • アカウント作成時からある

リンク

qiita.com

qiita.com

Bootstrapを用いて為替商品計算ツールインタフェースをつくったみた!

イントロ

目的

  • 日々の業務でもどうせなら流行りのwebアプリにのったものを使いたい
    • 見た目の美しいインタフェース
    • 自由自在で使い勝手の良いインタフェース
    • 端末に関係なく使えるwebアプリ

現状

  • エクセルツールとかいうダサいインタフェース。
  • UI用ライブラリ使ったアプリもあるけど依然としてダサいし、保守がめんどうだ

問題点

  • 見た目が美しくなく良いユーザエクスペリエンスが期待できない
  • 表計算ツールをインタフェースにするというだささ
  • 端末依存甚だしい

解決策

  • 更新が容易なweb UIスキームを用いて、UIを作ろう!
    • なぜなら、
      1. 見た目が美しい
      2. 更新が容易
      3. 端末依存がない

Bootstrapとは

Bootstrap

  • Twitter社が開発したCSSフレームワーク
  • メリットは?
    • レスポンシブルなwebデザインに対応している *
      • CSS3のメディアクエリを利用して、 レスポンシブルにブラウザの横幅サイズを変更できる
    • 追加要件に容易に対応できる *
    • 全体のデザインのバランスが崩れない *

Bootstrapを使ってみよう

準備

  • このページに従って準備を行った

Fx Calculatorをつくってみた

  • 依然としてダサいがまあデザインは後で改良するとしてこんな感じ

    <!DOCTYPE html> Bootstrap Sample

      <header style="background-color:white">
            <h1>Fx Calculator</h1>
      </header>
      <div class="container-fluid">
        <div class="row">
          <div class="col-sm-4" style="background-color:gray;">
            <h3>Today</h1>
            <div class="form-group">
              <lable for="today">Today</lable>
              <input type="date" class="form-control" id="today">
            </div>
            <div class="form-group">
              <lable for="spot-rate">Spot Rate</lable>
              <input type="value" class="form-control" id="spot-rate" value="100.0">
            </div>
            <h3>Model</h1>
            <div class="form-group">
              <lable for="drift">Drift</lable>
              <input type="value" class="form-control" id="drift" value="0.0">
            </div>
            <div class="form-group">
              <lable for="volatility">Volatility</lable>
              <input type="value" class="form-control" id="volatility" value="0.0">
            </div>
            <h3>Contract</h1>
            <select class="form-control">
              <option>FxForward</option>
              <option>FxCallOption</option>
              <option>FxPutOption</option>
            </select>
            <div class="form-group">
              <lable for="strike">Strike</lable>
              <input type="value" class="form-control" id="strike" value="0.0">
            </div>
            <div class="form-group">
              <lable for="delivery">DeliveryDate</lable>
              <input type="date" class="form-control" id="delivery">
            </div>
          </div>
          <div class="col-sm-8" style="background-color:white;">
            <h3>Result</h1>
          </div>
        </div>
      </div>
      <footer style="background-color:gray">
          <button type="button" class="btn btn-primary btn-lg btn-block">Calculate</button>
      </footer>
    </body>
    

Pythonによるデータ分析入門 その1

Intro

随分前にPythonのPandasというライブラリを使用して金融データの分析をしようと言いましたが、新社会人生活も忙しくなかなか手が出せませんでした。他にも勉強しないといけないことはありますが、ちょくちょくやっていきたいと思います。

以前、Pandas:python用データ解析ライブラリ - 金融と工学のあいだのブログで紹介したように、早速

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

を購入してみました。

Shreve Ⅰ Exercises chpater2

要旨

二項モデルにおいて標本空間\(\Omega\)と確率測度\(\mathbb P\)を導入し、\(\Omega\)上の確率変数\(X\)を説明しています。期待値や条件付き期待値、マルチンゲール、マルコフ過程を説明しています。

マルチンゲール性とは
\begin{align*}
M_n=\mathbb E_n[M_{k}]~~~~~~(n < k)
\end{align*}
のように確率変数の将来の期待値\(\mathbb E_n[M_{k}]\)(現在の条件付き期待値)が現在の値\(M_n\)から変化しないことを言い、賭け事の平等性などを表しています。

進め方

奇数の問題を解いていきたいと思います。

Exercises 2.1

証)
(i)
\( \mathbb P(A) + \mathbb P(A^c) = \mathbb P(\Omega) = 1 \)より\( \mathbb P(A^c) = 1 - \mathbb P(A) \)

(ii)
\(N=2\)の時を考える。
\(\sum_{n=1}^2 \mathbb P(A_n) = \mathbb P(A_1) + \mathbb P(A_2) = \mathbb P(\cup_{n=1}^2 A_n) - \mathbb P(A_1 \cap A_2) \geq \mathbb P(\cup_{n=1}^2 A_n)\)

Exercises 2.3

証)
\(M_n=\mathbb E_n[M_k] \rightarrow \phi(M_n) \leq \mathbb E_n[\phi(M_k)]\)を証明すれば良い。
Conditional Jensen's inequalityから証明できる。

Exercises 2.5

証)
(i)
定数nを導出するために\( (M_{j+1}-M_j)^2=1 \)であることに着目する。
\(n=\sum_{j=0}^{n-1} (M_{j+1}-M_j)^2=\sum_{j=0}^{n-1} M_{j+1}^2-2M_{j+1} M_j+M_j^2\)
\(=\sum_{j=0}^{n-1} -2(M_{j+1}M_j-M_j^2)+M_{j+1}^2-M_j^2=-2I_n+M_n^2\)より
\(I_n=\frac{1}{2}M_n^2-\frac{n}{2}\)

(ii)
\(E_n[f(I_{N+1})]=E_n[f(\frac{1}{2}M_{n+1}^2-\frac{n+1}{2})]=\frac{1}{2}f(\frac{1}{2}(M_{n}+1)^2-\frac{n+1}{2})+\frac{1}{2}f(\frac{1}{2}(M_{n}-1)^2-\frac{n+1}{2})\)
\(=\frac{1}{2} f(\frac{1}{2}(M_{n}^2+2 M_{n} - n))+\frac{1}{2}f(\frac{1}{2}(M_{n}^2-2 M_{n}-n))=\frac{1}{2}f(I_n+M_{n})+\frac{1}{2}f(I_n-M_{n})\)
\(=\frac{1}{2}f(I_n+\sqrt{2I_n+n})+\frac{1}{2}f(I_n-\sqrt{2I_n-n})=g(I_n)\)

Exercises 2.7

\(S_{n+1}=S_n+g(X_1,\cdots,X_n)X_{n+1}\)として\(g(X_1,\cdots,X_n)\)が-1または1になるようにした時、
マルチンゲール性を保ちながらも全ての試行結果を保存しなければならないのでマルコフ性はない。

Exercises 2.9

証)
(i)
\(\widetilde{p_0}=1/2,\widetilde{q_0}=1/2,\widetilde{p_1}(H)=1/2,\widetilde{q_1}(H)=1/2,\widetilde{p_1}(T)=1/6,\widetilde{q_1}(T)=5/6\)より
\(\widetilde{\mathbb P}(HH)=1/4,\widetilde{\mathbb P}(HT)=1/4,\widetilde{\mathbb P}(TH)=1/12,\widetilde{\mathbb P}(TT)=5/12\)

(ii)
\(V_1(H)=\frac{4}{5}(\frac{1}{2}5+\frac{1}{2}1)=12/5\)と同様に\(V_1(T)=1/9,V_0=226/225\)

(iii)
\(\Delta_0=\frac{V_1(H)-V_1(T)}{S_1(H)-S_1(T)}=103/270\)

(iv)
\(\Delta_1(H)=\frac{V_2(HH)-V_2(HT)}{S_2(HH)-S_2(HT)}=1\)

途中・・・

Shreve Ⅰ Exercises chpater1

進め方

とりあえず奇数の問題を解いていきたいと思います。

Exercises 1.1

少し文章がわかりづらかったが、簡単にまとめると\(0 < d < 1+r < u \)かつ\( X_0=0 \)の条件の時、
\begin{align*}
X_1=\Delta_0 S_1+(1+r)(X_0-\Delta_0 S_0)
\end{align*}
は必ず正になるとはかぎらないことを証明すれば良い。
ただし、\(r\)は利率で、コインが表の時は\(S_1=uS_0\),裏の時は\(S_1=dS_0\)である。

証)
コインが表の時\(X_1(T)=\Delta_0 uS_0+(1+r)(X_0-\Delta_0 S_0)>0\)、
コインが裏の時\(X_1(H)=\Delta_0 dS_0+(1+r)(X_0-\Delta_0 S_0)>0\)が常に成り立てば良い。
しかし、上式からは\(\Delta_0S_0(u-(1+r))>0\)より\(\Delta_0>0\)、
下式からは\(\Delta_0S_0(d-(1+r))>0\)より\(\Delta_0<0\)で矛盾する。

注)
これは条件として\( X_0=0 \)を加えているが一般的には必要ない。一般的にargitrageである場合、\( P(X_1 < (r+1)X_0 )=0 \)を証明すれば良い。

Exercises 1.3

証)
\( V_0 = \frac {1}{1+r} \{ \frac{1+r-d}{u-d}V_1(H) + \frac{u-1-r}{u-d}V_1(T)\}
=\frac {1}{1+r} \{ \frac{1+r-d}{u-d}uS_0 + \frac{u-1-r}{u-d}d S_0\}
=S_0
\)

注)
たしかに\(S_0\)これは\(S_1\)を完全に複製するコストである。

Exercises 1.5

証)
どちらの場合も持ち資金は0で等しくなる。

Exercises 1.7

例1.2.4の逆のストラテジを行えば良いようです。そもそもshortは(空)売りでlongは買いだそうです。