記録帳

クラウド、データ分析、ウイスキーなど。

【感想】基礎からの新しいストレージ入門

皆さんは、ストレージを使っているでしょうか。私は、パソコンに入っているSSDやHDD、NASGoogle DriveDropboxなど様々なストレージを利用しています。ただ、そこにどんな技術が使われているかはあまり意識したことがなく、興味を持ったのでこの本を購入してみました。
結果、ややハード寄りですが、ソフトとハードをうまいこと組み合わせて使っていることが分かって面白かったです。その中で、重要と感じたポイントや、少し詳細に調べてみたことを記録しておこうと思います。

目次

どんな本?

2023年8月に発売された、ストレージの仕組みを解説している本です。ブロックストレージ、ファイルストレージ、オブジェクトストレージ全て記載されていますが、メインはブロックストレージです。また、仕組みだけでなく著者の経験によるベストプラクティスや、最近のストレージのCloud Native化についても言及されておりためになります。ストレージの種類やプロトコルについて、なんとなく単語レベルで聞いたことがあるくらいの認識でしたが、この本で体系的に整理できてとても良かったです。

重要と感じたポイント

全体の中で、chapter1, 2のストレージの仕組み、chapter5のベストプラクティスの部分が個人的に特に参考になったと感じたので、その中から重要そうなポイントをピックアップしてみました。

接続インターフェース(マザーボードとドライブ間)

接続インターフェースの代表例としてSASSATA、NVMeが紹介されています。SAS/SATAはHDDと共に進化してきたインターフェースであり、NVMeはSSDの登場に伴い登場したインターフェースとのことでした。ちなみに、SASSCSIスカジー)系のインターフェース、SATAATA(アタ)系のインターフェースらしいです。

このインターフェースの規格については、まさに「名前は聞いたことあるけど体系的に知らない」知識の代表でした。SATAケーブルなどをよくわからずつないだことがありましたが、HDDのインターフェースの名前だったんだなと腑に落ちました。

これについては、もう少し調査して内容整理したので後述します。

接続インターフェース(サーバーとストレージ間)

こちらは、PC内のマザーボードとドライブ間の話ではなく、サーバーとストレージ間の話です。いわゆる外付けのストレージ接続ですね。こちらで使われる通信にはデータ自体の読み書きを行う処理のデータプレーンと、ボリューム作成/削除などメタ的な操作を行うコントロールプレーンの2つがあります。

ブロックストレージ向けのデータプレーンのプロトコルとして、FCP(Fibre Channel Protocol)、iSCSI、NVMe-oF(NVMe over Fablics)の3つが紹介されています。FCP/iSCSIは、SCSIの命令セットをネットワーク上で使用できるプロトコルです。前者のFCPは光ファイバーケーブルの専用ネットワークを使い、後者のiSCSITCP/IPのネットワークで使えるところが違いです。iSCSIの方が、現在よく使われるネットワークで使えるので、安価に使えます。

よく考えると内蔵ディスクと外付けディスクでは通信プロトコルが違うのは当たり前ですが、意識したことのない差でした。そしてそれが内蔵ディスクの方のプロトコルをネットワーク上で使えるように拡張したものであるというのも、面白いポイントでした。

RAIDミラーリング

ディスクの冗長化の方法であるRAID(RAID0/RAID1/RAID1+0/RAID5)と、ストレージの冗長化の方法であるミラーリングが紹介されています。RAIDはハードディスクなどのドライブ障害の対策であり、ミラーリングはストレージ自体の個体障害、データセンターなどのサイト障害の対策になります。この時、サイト障害対策のミラーリングは長距離となるので、ミラーは非同期になります。

RAID、基本情報を受けるときに覚えて、それ以降はあやふやなままでした。冗長化のうちの1つの手法である、と捉えると理解が進みますね。また、考え方は分散処理に出てくるレプリケーションパーティションと似ている概念ですよね。このあたりは、分野が異なっても概念というか考え方は共通していて、面白いです。

スループットとIOPS

性能監視の際の指標値として、単位時間当たりのデータ転送量であるスループットと、1秒間に読み書きできる回数のIOPS(Input/Output Per Second)が紹介されています。前者はデータの転送量、後者は読み書き回数に着目した性能の指標値です。ワークロードによって、重視するものは異なります。

AWSブロックストレージサービスであるEBSにも、Provisioned IOPS SSDボリュームと、スループット最適化 HDDボリュームが存在しています。この違いがより理解できました。

接続インターフェースについてもう少し調べてみた

SASSATA、NVMeなどの接続インターフェースについて、もう少し調べてみて自分なりにまとめてみました。 SSDのインターフェースと、HDDのインターフェースで分けて記載します。

SSDのインターフェース

この書籍と、いくつかのWebサイトを見てオリジナルでまとめたのが以下の図です。オリジナルの図なので、もし誤りがあった場合はご指摘いただけると助かります。

書籍に出ていたように、SSDのインターフェースはNVMeとSATAが代表的な2つです。ただ、調べてみると、それぞれ通信プロトコル、接続規格、接続端子のサイズ規格というレイヤーの異なる規格に分かれているようです。そして、NVMeとPCIe、AHCISATAはセットのようですが、接続端子のサイズ規格はいくつか種類に分けられるようです。

参考に、価格.comのSSD製品一覧で、それぞれの対応SSDの個数を調べてみました(2024年1月15日時点)。

サイズ規格 \ 接続規格 PCIe SATA
M.2 572 件 110 件
2.5 インチ 37 件 357 件
mSATA 0 件 40 件

PCIeはM.2、SATAは2.5インチが多いですね。ただ、PCIeの2.5インチや、SATAのM.2もあることはあるようです(PCIeの2.5インチについては、数が少なかったので上図では省略しています)。M.2だから速い!と思って買うのではなく、ちゃんとPCIe(NVMe)対応のM.2 SSDであることまで確認した方が良いですね。

HDDのインターフェース

HDDの方は、SSDのように通信プロトコル/接続規格/接続端子のサイズ規格のレイヤーに分かれた説明がネットでもありませんでした。あったのはインターフェースとしての歴史的な経緯で、以下の2つの系譜です。

ATA (IDE) となっているのは、実質同じものを指しているからです。IDEという規格を、ANSIATAという規格に標準化したとのことでした。

SASSATAより高速らしいですが、おそらく私が買ったことあるPCに入っているのはすべてSATAだったと思います。SATASASでは端子から異なるので(SCSIATAも異なりますが)、ぜひ秋葉原かどこかで実物を見たいですね。

こんなにある!HDDの種類 – バックアップ・データ復旧 | GUARDIAN+R

EC2+EBSの接続を確認してみた

さて、ここまでいろいろ調べると、実際にやってみたくなるのが人のサガ。書籍では記載がありませんでしたが、AWSのサービスEC2+EBSでどのようなインターフェースで接続されているのかを確認してみます。

EC2インスタンスにEBSをアタッチした後に、EC2インスタンス上でフォーマットとマウントを実行します。こちらは、書籍に記載のコマンドと大体同じでした。ただ、書籍ではiSCSIプロトコル(コマンド)を使用してアタッチしていましたが、EC2+EBSではコンソールかAWS CLIでアタッチするのでどのインターフェースで接続されているのかがよくわかりません。

そこで、PCIバイスの情報を表示する lspci コマンドを実行してみます。すると、以下のように表示されました。

sh-4.2$ lspci -nn | grep memory
00:04.0 Non-Volatile memory controller [0108]: Amazon.com, Inc. Device [1d0f:8061]
00:1f.0 Non-Volatile memory controller [0108]: Amazon.com, Inc. Device [1d0f:8061]

この最後のカッコ[ ]の後半4桁がDevice IDを表すらしく、8061はNVMe EBS Controllerを表すそうです。つまり、プロトコルとしてNVMeを利用していることが分かりますね。

EC2から見るとマザーボードとドライブ間のインターフェースであるNVMeとして認識されていそうですが、よく考えてみるとEC2とEBSは直接物理的につながっているわけではなくネットワークを通してつながっているはずです。EBSのBlackBeltを見ると、やはり実体はネットワーク接続型ストレージのようですが、ユーザはネットワークを意識する必要はないそうです。

https://d1.awsstatic.com/webinars/jp/pdf/services/20190320_AWS-BlackBelt-EBS.pdf p.12より

おわりに

この書籍をきっかけに、ストレージについて興味を持って調べることができました。何気なく使っているストレージですが、中身の仕組みを調べだすととても面白いですね。クラウドサービスでも、ストレージのどの種類なのか、どのプロトコルが使えるのかなど意識してみてみると、より理解が深まりそうだなと思いました。ストレージやネットワークなど、基礎知識をしっかり学習するのは重要ですね。

参考

記事内に張ったリンク以外に、参考にしたページを載せておきます。

www.dospara.co.jp

www.logitec.co.jp

atmarkit.itmedia.co.jp

Dell Technologies の方のインフラ基礎のスライド資料
https://japancatalog.dell.com/c/wp-content/uploads/20221021_beginners.pdf

【感想】世界一流エンジニアの思考法

あけましておめでとうございます。今年もよろしくお願いいたします。
今年は、知識の地盤を固める年にしようと思いまして、その一環として積読を消費していこうと思っております。
その第一弾として、この本を読んだので記録しておきます。

目次

どんな本?

2023年10月に発売された、米マイクロソフトの現役エンジニアの方(日本人)が書いている本です。Azureの開発に関わっている方で、アメリカのマイクロソフトで働くようになってから気づいたこと、周りの凄腕エンジニアがやっていることなどを分かりやすく解説してくれています。Amazonでは★4.7でめちゃくちゃ人気の本です。

内容を一言でいうと、色々な無駄なことをやめれば仕事の生産性高まるぜ!空いた時間で筋トレして幸せになろう! という感じでしょうか。この「無駄なことをやめれば」というところの考え方が、色々と載っていて面白いです。ここからは、個人的に気になったポイントをピックアップしていきます。

気になったポイント

一つだけピックアップする

生産性を高めるための考え方の一つとして、「Be Lazy」(怠惰であれ)というものが紹介されています。これは、より少ない時間で価値を最大化するという考え方とのこと。その中の一例として、この「一つだけピックアップする」ということが挙がっていました。
書籍では、エンジニアなのでバックログの中から一つだけピックアップして実装するという例が出ていましたが、なんにでも当てはめられるなと思いました。

私はとりあえずなんでも手を出したり、「あれもこれもやりまぁす!」と言って結局全部中途半端になったりということが良くあります。なので、この考え方は役に立ちそうだなと感じました。「いくつかをピックアップする」とかではなくて、「一つ」なのが良いですよね。曖昧さがない。そういう意味では、今回も書籍からピックアップする箇所は一つにしようかなと思いましたが、「一つ」選ぶことを6回やったと考えることにしました。

試行錯誤ではなく、仮説を立てる

とりあえず何でもかんでもやるのではなく、ある仮説を立ててみてそれを検証する行動をとるべし、という内容でした。書籍ではプログラムのバグを解消する際の例が載っていました。

自身のコンサルで置き換えて考えてみると、特にお客さんへのヒアリングや提案の際に使える考え方だなと思いました。ヒアリングの際は、事前情報(営業からの話や資料、会社のHPなど)から課題の原因や背景を仮定して、それを検証するようなヒアリング項目を準備する。提案の際は、ヒアリングで聞いた情報をもとに仮定を更新して、それを解決するような提案をまとめて持っていく。今思うとそういうことをしているなと思いつつ、改めて意識していきたいなと思います。

少し脱線しますが、仮説を立てるには想像力が必要であり、この「想像力」が仕事において結構大切だなと感じています。例えば仕事の見積もりをするときにも必要ですし、上記のお客さんへの提案の際にも必要になりますよね。この想像力を向上させるために、仕事だけではない様々な経験が必要になるなと思いました。

理解には時間をかける

他の章ではとにかく「時間を短縮せよ」と言っていますが、ここは逆です。どんなに天才でも理解するのには時間がかかるから、ささっと読んで分かった気になるなよ、ということです。特に「構造」を理解することが重要だと著者は言っています。プログラムやアーキテクチャの理解ではもちろん構造は重要ですが、それ以外でもまずは全体の構造を理解することは重要ですよね。

この章も、結構自分に刺さりました。最近は、あまり書籍を読み込んだり自分で手を動かしたりすることが少なくなってきていて、ブログ記事やXの内容をさらっと読んでいることが多くなっていたからです。おそらく飽きっぽいのだと思いますが、今まで業務でやってきたところは「まぁ詳しいからええやろ」と結構そのままになっているところが多いです。今年は、そのあたりも改善していかないといけないですね。

メンタルモデルを構築する

本書のp.45から引用すると

メンタルモデルとは、人々が世界を理解し、予測し、解釈し、新しい状況に適用するための、自己の心の中のイメージや理論

とのことです。さらに本書では、いくつかのフレームワークを頭に入れておいて、それに従って仕事をすることが例として挙げられていました。簡単にいうと、「仕事のカタを持っておこう」ということでしょうかね。仮説を立てる、の章で出てきた内容も、ある意味メンタルモデルの一つでしょうか。というか、それ以外の章もすべて最終的にはメンタルモデルに落としていけそうですね。

個人的には、このメンタルモデルというものをまず構築して、あとは所属している会社、お客さん、チームメンバーなどに合わせて調整していくイメージを持ちました。前職で構築したメンタルモデル(プロジェクトの進め方や資料の作り方など)を今でも大体受け継いでいますし、新しい会社のやり方を少し混ぜています。ただ、その比率(自分のメンタルモデルと、会社のやり方などの環境によるもの)は個人に依存しそうですね。私は環境に引っ張られがちなので、もう少し自身のメンタルモデルを確立しても良いかもしれません。

意見が対立しても否定しない

アメリカだと、「In my opiniton」というフレーズが頻繁に出てくるとのこと。何か否定するのではなく、「私の意見はこれなので、参考程度に~」的なニュアンスで指摘されることが多いらしいです。言われる側も少し楽だし、何より言う側も楽になりますよね。

ただ、例えば自身がリーダーのプロジェクトでお客さん向け資料をメンバーに作ってもらっている、かつ納期がギリギリというときでもこの姿勢を貫けるでしょうか。どうしても、その評価が自分に跳ね返ってくると考えてしまって、自分の思い通りの資料になっていてほしい!と考えてしまい、「これはこう直してください!」という口調になってしまいそうですよね。それか、「もうこれは自分でやった方が良い」となってしまいそう。

本書で推奨されているサーバントリーダーシップと呼ばれるマネジメントでは、メンバーは「結果に対して報いを受ける」とあります。自分の成功は自分の成功だし、逆に失敗は自分の失敗になります。つまり、チーム構成とタスクの割り振りの時点で、そのタスクの責任の所存をそのメンバーに返ってくるようにすべきであり、そうすればおのずと「In my opiniton」的なニュアンスで指摘ができそうだなと思いました。 上記の例では、そのお客さん向け資料作成は自分でやるべきなんだと思います。

そうなると、従来のピラミッド的な構造のチーム割は結構難しいですよね。少人数で入って、それぞれがxxxの専門家です、という感じで担当するのが理想になりそうです。

仕事を楽しんでいるか?を確認する

上記のサーバントリーダーシップと同じくチームビルディングについての話ですが、自己組織チームという方法が近年日本でも取り組まれているらしいです。上司が指示するのではなく、メンバーが自分で考えて意思決定するチームが「自己組織チーム」であるとのこと。そのチームの特徴の一つに「チームのエンゲージメント(満足度)が高い」というものが挙げられています。これに関して、ここに挙げている「仕事を楽しんでいるか?」がとても重要視されるとのことでした。

これは、外資だからか今の会社でも重要視されていますね。そして、自分を含め同年代や周りのメンバーも、仕事を楽しんでいそう。個人的には、技術に関わることを結構な時間できていることが大きいのかもしれません。自分で試しに検証してみたり、色々調べて比較の提案資料を作ってみたりする作業は純粋に楽しいです。あとは、会社の仕組みとしてめっちゃ褒められることもあるのかも。周りからのフィードバックがとにかく多いので、もちろん直すべきところも指摘されますが、それ以上にすごい褒められる。褒められると嬉しいですよね。

おわりに

上記以外にも、色々と参考になることが載っていたので、仕事のやり方とかに迷っている人には結構おすすめです。ただ、個人的には「ノートなどは使わず頭の中だけで試行整理する」「納期は絶対ではない」という2点だけは、余り納得できていないポイントです。ただ、本書で学んだおかげで「こういう意見もあるんだなぁ」というスタンスでいます。このように、すぐに役立つところが多いのも良いところですね。
今回のように、今年は書籍の感想もいくつか書いていきたいですね。大体この記事書くのに1.5時間くらいかかった(読むのは別にして)ので、それくらいは時間使っていきたいと思います!

不偏分散の期待値がσ^2になることを確かめる

皆さんこんばんは。寒い日が続きますね。
ついに明日は統計検定1級を受ける日です。準備は進んでおりますでしょうか。
この前日という日に上げるにはかなり基礎的な内容にはなってしまいますが、不偏分散の期待値の計算、いつもしっくりこなかったんですよね。
それが、かなりクリアになる計算方法をやっと確立できたので記事にします。

不偏分散の期待値計算

そもそも不偏分散とは…という説明はこちらのサイトに譲ります。
bellcurve.jp

簡単に言うと、標本分散と同じような統計値ですが、不偏性を持つようにnで割るのではなく(n-1)で割るようにした分散です。
期待値を取るとσ^2になるのですが、その計算をしていきます(統計検定2018年問1などで出題されたことがあります)。

ポイントは青文字で書いた4つです。

ポイント①

身も蓋もないですが、この計算は覚えます。ただ、一度は普通に計算してみても良いかもしれません。
この変形のコツは、最初の二乗式を
 ( (X_{i} - μ) - (\bar{X} - μ) )^{2}
このように変形することです。ここから計算していくと、①の変形ができます。

ポイント②

ここは、Σと期待値Eを入れ替えています。式で表すと分かりやすいですよね。
入れ替えて良いかの判断は、一回Σを具体的な値で書き下してみると確認しやすいです。

ポイント③④

これは定義通りです。X_iは、結局確率変数Xに従うため、Var(X)と同じσ^2となります。
Xの平均の分散はσ^2/nとなるのはよく出るので覚えましょう。

おわりに

いろんなサイトにこの計算は載っていましたが、計算するところと覚えるところの良い塩梅が難しく、なかなか自分の中でテンプレ化できないでいましたが、今回、前日になってやっと固まってよかったです。
これで、不偏分散の期待値がどうしても確認したくなった時もばっちり!安心して不偏分散を使いましょう。

確率変数の変数変換を超わかりやすく説明する

まえがき

皆さんは、統計で出てくる確率変数の変数変換をご存じでしょうか。
式を覚えては見たものの、ちょっと応用されると全く分からなくなる、でおなじみの変数変換です。
 Y=X^2ならいいんです。ただ、それも範囲を一捻りされると暗記した式では解けなくなります。
私は3年くらい、ずっと悔しい思いをしていましたが、ついに完全理解しました。
なので、その感動を共有すべく、キーボードを手に取った次第です。

変数変換ってどういう問題?

例えばこういう問題です。
(現代数理統計学の基礎 第2章演習問題 問12を一部改変)

Xの確率密度関数 f(x)=1, 0 < x < 1で与えられている。
 Y=X^2なる変数変換したときのYの確率密度関数を求めよ。

ある確率変数Xとその確率密度関数が与えられていて、それを Y=g(X)なる関数で変換したときのYの確率密度関数を求めます。
何すればよいか、よくわからないですよね。そんなときのために、公式が用意されています。

変数変換を解く公式

現代数理統計学の基礎 p.24では、以下の公式が記載されています。

確率変数Xの確率密度関数 f_{X}(x)とし、 Y=g( X )とする。
g(x)が単調増加もしくは単調減少な関数とし、 g^{-1}(y)微分可能であるとする。この時、Yの確率密度関数は次で与えられる。
 f_{Y}(y) = f_{X}(g^{-1}(y)) | \dfrac {d}{dy}g^{-1}(y)|

まずこの式を見ていきます。

まず、 g^{-1}(y)という式が2つ出てきます。
これは、 y=g(x)逆関数です。もっと簡単に言うと、 y=g(x)をxについて解いた式です。
例えば Y=3X+2であれば、 x= \dfrac {y-2}{3}、つまりは g^{-1}(y) = \dfrac {y-2}{3}です。
元の式を見ると、 g^{-1}(y) f_X(x)に代入したものと、 g^{-1}(y)をyで微分して絶対値を取ったものを掛け合わせています。

先ほどの例、 Y=3X+2で計算してみると、
 f_{Y}(y) =  f_X(\dfrac {y-2}{3})|\dfrac {d}{dy} \dfrac {y-2}{3}|
となります。あとは、元々の f_X(x)の式を使って計算していけば答えが出ます。
問題は、なぜこのような公式になるのか?ですよね。

公式の導出

現代数理統計学の基礎 p.23に導出が書いてあるので、こちらを補足しながら見ていきます。
全体的な方針としては、以下の2STEPです。
1. 分布関数 F_{Y}(y)を式で表す(この時の範囲に注意)
2.  F_{Y}(y)微分して f_Y(y)を示す

1.分布関数 F_{Y}(y)を式で表す

分布関数の定義と Y=g(X)から、以下のように書けます。
 F_{Y}(y) = P(Y \leq y)=P(g(X) \leq y) = P(X \in \{ x | g(x) \leq y \} )
3番目と4番目は同じことを言っていますが、表記を変えただけです。
4番目の式は、確率変数Xが{ }の中のxである確率という意味です。

さて、このままではxの範囲がyの式のままです。
これをxの範囲に変換します。先ほどの式の{ }の部分だけを見ていくと
 \{x|g(x) \leq y \} = \{x| x \leq g^{-1}(y) \}
と書けます。ここがミソです。
上記の式で、xの範囲がxについて示せました。この範囲の確率Pを積分すれば分布関数 F_Y(y)になるので、
 F_Y(y) = \int_{-\infty}^{g^{-1}(y)} f_X(x)dx
と表せます。

…私はこの式の変形が何回見てもしっくりきませんでした。
特に g^{-1}(y)こいつ。こいつがいると意味が分からなくなります。
なので、具体的に、先ほどの例 Y=3X+2で考えます。
この例でxの範囲をyではなくxで表すと
 \{x|g(x) \leq y \} = \{x|3x+2 \leq y \} = \{x| x \leq \dfrac {y-2}{3} \}
こうなります。なので、この範囲の確率を計算すると
 F_Y(y) = \int_{-\infty}^{\frac {y-2}{3}} f_X(x)dx
こうなりますね。めっちゃわかりやすい!!
ここから、この分布関数を微分して、本当に求めたかった F_{Y}(y)を求めていきます。

2.  F_{Y}(y)微分して f_Y(y)を示す

具体的な方ではなく、一般的な式で見ていきます。
おさらいすると、分布関数は
 F_Y(y) = \int_{-\infty}^{g^{-1}(y)} f_X(x)dx
と表せましたね。これを微分して、インテグラルの中の f_X(x)を取り出します。

この分布関数は定積分です。つまり、 - \inftyの方は定数なので、微分したら消えますね。
そのため、前の g^{-1} (y)の方だけを考えます。
これを微分すると、 f_X(x)のxに g^{-1} (y)を代入したものが出てくる…
だけではなく!
 g^{-1} (y)自体を微分したものを掛けます。
なぜそうなるかは、このあたりのHPを参考にしてください。高校数学です。

結局こうなります。
 f_{Y}(y) = f_{X}(g^{-1}(y)) \dfrac {d}{dy}g^{-1}(y)
公式の絶対値がついていないバージョンが出てきましたね!
さて、なぜ公式では絶対値がついているのでしょう?

絶対値がついているワケ

公式の中で、この一文に注目して下さい。

g(x)が単調増加もしくは単調減少な関数とし

はい。単調増加、もしくは単調減少です。
先ほどの例で、 Y=3X+2で考えましたよね。これは単調増加です。
単調減少する Y=-3X+2で考えてみましょう。
こちらを先ほどのSTEP1と同じように、xの範囲にすると
 \{x|g(x) \leq y \} = \{x|-3x+2 \leq y \} = \{x| \dfrac {2-y}{3} \leq x \}
となります。積分式で書くと
 F_Y(y) = \int_{\frac {2-y}{3}}^{\infty} f_X(x)dx
となります。先ほどと積分範囲の∞が逆ですね。
今回のxの範囲は何々以上、なので、xは∞まで値を取ることができますので、このような式になっています。

さて、STEP2の微分をしていきます。
今回は、前の∞は定数になるので微分すると0です。つまり、後ろの方を計算していきます。
その際、定積分の計算をするので、後ろはマイナスがつくことに注意すると、
 f_{Y}(y) = - f_{X}(\frac {2-y}{3}) \dfrac {d}{dy}\frac {2-y}{3}
このように計算できます。
こちら、後ろの微分する項は、-yを微分するのでマイナスが出てきますね。
前についているマイナスと、この微分で出てくるマイナスで結局マイナスが消えてプラスになります。

つまり、g(x)が単調減少の場合は、yの前にマイナスがつきます。
そのため微分すると必ずマイナスが出てきますが、定積分の前後の関係から、そっちでもマイナスが必ず出てきます。
なので結局プラスになるので、単調減少でも公式が適用できるように絶対値がついているんですね。

応用編: Y= -log(|X|)の変数変換

ここまでで公式の出し方が分かったと思うので、単純な単調増加、単調減少の関数ではない関数を見ていきます。
現代数理統計学の基礎の演習問題 第2章 問13(3)を解きます。
問題文はここから引用です。
MathStat_Answers.pdf - Google ドライブ

これは単純増加、単純減少ではないので、先ほどの公式がそのまま使えません。
ただ、公式の導出の考え方は使えます。

まずSTEP1でやったことを思い出してください。xの範囲を特定していました。
 -log|x| \leq yをxについて解いてみます。
 -log|x| \leq y \Leftrightarrow log|x| \geq -y \Leftrightarrow log|x| \geq log {e^{-y}}
log同士の比較は、底が1より大きければそのまま外せます。今回の底は自然対数eなので1より大きいです。つまり、
 log|x| \geq log {e^{-y}} \Leftrightarrow |x| \geq e^{-y} \Leftrightarrow x \geq e^{-y}, -e^{-y} \geq x
となります。
この範囲の積分をすれば、分布関数になるはずです。
今回は範囲がxがある数以下とある数以上に分かれているので、積分は2つ登場します。
 F_Y(y) = \int_{ e^{-y}}^{\infty} f_X(x)dx + \int_{-\infty}^{-e^{-y}} f_X(x)dx

これをSTEP2の時と同じく微分します。
 f_Y(y) = (-f_X(e^{-y})) \frac {d}{dy}(e^{-y}) + (f_X(-e^{-y})) \frac {d}{dy} (-e^{-y})= (-f_X(e^{-y})) (-e^{-y}) + (f_X(-e^{-y})) (e^{-y})
ここで f(x) = 1/2であるため、それを代入して計算すると
 f_Y(y) = (-\frac{1}{2}) (-e^{-y}) + (\frac{1}{2}) (e^{-y}) = e^{-y}
となります。
また、yの範囲についても計算すると、-1 < x < 1の範囲を Y=^log|X|で考えて、
 y > 0となります。
以上で解けましたね。

ポイントは、やはりxの範囲。それを出してからその範囲に従って積分することが重要です。
それが分かれば、どんな変数変換でもできる…はず!

応用編②:xの範囲指定がある Y= X^2の変数変換(2023/4/7追記)

問題を解いていて、もう1点重要な観点に気づきました。
それは、xの範囲でyのグラフが変わるかどうか?です。
現代数理統計学の基礎の演習問題 第2章 問15を解きながら考えます。

こちらの問題、xの範囲指定がなければ、いつもの Y = X^2の変数変換です。
ですが、xの範囲があることで少し事情が変わってきます。


こちらが、今回のxの範囲における、 y=x^2のグラフです。
 -1 < x < 1の範囲、つまり 0 < y < 1の範囲においては、通常の y = x^2のグラフですよね。
ただ、 1 < y < 4の範囲においては、第2象限の部分は消えているため、通常の y = x^2のグラフとは異なります。
そこで、場合分けが必要になるというわけです。

 0 < y < 1の場合は、通常の y = x^2なので省略。
 1 < y < 4について考えます。

分布関数を求めると、以下のようになります。
 F_Y(y) = \int_{ -1 }^{ 1 } f_X(x)dx + \int_{ 1 }^{\sqrt{y}} f_X(x)dx
まず1つ目のインテグラルでは、 -1 < x < 1の範囲の積分です。これは定積分になりますね。
2つ目のインテグラルは、xの範囲を考えたときの -\sqrt{y} < x < \sqrt{y}の兼ね合いで考えます。
xは1より大きいのですから、1より大きく、 \sqrt{y}より小さくなりますね。

後はこれを微分して解いていくだけです。
この問題により、xの範囲でyのグラフが変わる場合の解き方を学ぶことができました。

まとめ

  • 変数変換の問題では、分布関数 F_Y(y)積分の形で表してから、微分することで確率密度関数を求める。
  • 積分の形で表すとき、xの範囲をyを用いて表すことが重要。
  • xの範囲でyのグラフが変わる場合は、yの範囲で場合分けして考える。(2023/4/7 追加)
  • 微分するときは、定積分の引かれる側と引く側どちらになるかで、マイナスをつけるかつけないかが変わることに注意。
  • 単純増加、単純減少の式であれば公式で解けるが、そうでない変換は公式そのまま使っても解けない。

以上です。
ずっとまとめたいと思っていたので、まとめられてよかったです。
この考え方だと解けない変数変換などあれば、ぜひ教えてほしいので、連絡お願いします。

現代数理統計学の基礎 第2章 問11, 12

問題文

問題文は、こちらより引用しています。
MathStat_Answers.pdf - Google ドライブ



また、模範解答は上のpdfのp.41から記載されています。

方針(問11)

4つのパートに区切る。

確率関数になることを示す

ここは、以下の2つを満たすことを示せばOK

  •  f(k) \geq 0となること
  • 合計が1になること

合計を計算するときは、無限等比級数の和を考える必要がある。
初項をa、公比をrとしたとき、 |r| < 1 の時  \dfrac {a}{1-r}となる。
それを計算すると1になる。

確率母関数の導出

こちらも無限等比級数の和を計算する。
ただ、またしてもsの範囲が引っかかる。
公比が \dfrac {s}{2}なので、範囲は |s|<2かと思いきや、解答では 0 < s < 2 になっている。
よくわからないが、sは正の値なのか?ここもわかる方コメント募集。

積率母関数の導出

同じく無限等比級数の和を計算する。
tの範囲は、私の考えだと t < log2 だと思うが、模範解答にも書いてなかった。
公比が \dfrac {e^{t}}{2}なので、 -1 <  \dfrac {e^{t}}{2} < 1となれば収束する。
ただ、 \dfrac {e^{t}}{2}はそもそも0より大きいので、 \dfrac {e^{t}}{2} < 1を解けばよい。
結果、 t < log2 となる。

E[X(X-1)…(X-k+1)]の導出

確率母関数 G(s)のk回微分を求めて、s=1を求めればよい。
k回微分は問10の(2)と同じように帰納的に考える。

方針(問12)

(1)

そのまんま計算。分数の割り算に注意して積率母関数を導出する。
平均と分散を考えるときは、ロピタルの定理を使う。意外と計算は短く済む。
あと、 f(x)=1, 0 < x < 1なんだからどう見ても平均は1/2だよね、という検算もできる。

(2)

現代数理統計学の基礎のp.25にある、平方変換 Y = X^{2}の変換
 f_{Y} (y) = \{ f_{X} (\sqrt{y} ) + f_{X} (-\sqrt{y}) \} \dfrac {1}{2 \sqrt{y}}
を使う。あとは、yの範囲も忘れずに出すこと。

平均と分散については、積率母関数などを使わずに普通に積分で解く。
yの何乗のような形で表せる確率密度関数の平均や分散は、通常の計算方法が一番楽に計算できる。

(3)

 Y = -log(X)の変数変換。
普通に考えればよいのだけれど、微分の部分は絶対値であることに注意。
普通に x = e^{-y} をyで微分するとマイナスがつくが、絶対値なので正になるところに注意。

平均と分散は、積率母関数M(t)から導出する。
その際、問10のようにまた発散する/しない問題に直面するが、最終的にt=0を入れるんだから収束するとして計算できる。

(4)

変数変換は単純。
ただ、平均と分散については、(2)と同じく積率母関数ではなく普通に積分で求めるのが楽。
 E[Y^{2}]の計算の際は、 a^3 - b^3 = (a-b)(a^2 + ab + b^2)因数分解使って解くと楽。
余談だが、この因数分解の式が思い出せなくて、絶望した。脳みそがツルツルになってきている。

感想

やっていることは結構パターン化されてきましたね。
変数変換の時の符号、母関数導出の際の範囲、平均分散求めるときの楽な方法などがポイントでしょうか。
このあたりは何度もやって定着させたいところ。

現代数理統計学の基礎 第2章 問10

問題文

毎回第2章を解いては解き方を忘れるので、解答の方針を記載することにしました。
問題文は、こちらより引用しています。
MathStat_Answers.pdf - Google ドライブ

また、模範解答は上のpdfのp.40に記載されています。

方針

(1)

積率母関数なので、いつも通り計算するだけ。
ただ、問題はtの範囲。解答では |t|<1と記載されているが、ここがt<1ではないのか?と思っている。
積率母関数を求めるために積分すると、
 \dfrac {1}{t-1} \left[ e^{(t-1)x} \right]^{\infty}_{0}
という式が出てくるが、eの指数が負に発散すれば e^{(t-1)x} は収束するのだから、t-1<0、つまりt<1においてこの積分計算は収束するように思える。
まぁ、最悪絶対値の付け忘れはマイナス1点だから、気にせず次に進む。
どなたか、ここが絶対値ついて|t|<1となる理由が分かる人いたら、教えてください。

(2)

ここは、積率母関数微分を3回くらいして、帰納的に法則を見つけてk回微分を計算する。
ちょっと微妙だけどしょうがない。分数の微分間違えないように注意。

(3)

みんな大好き変数変換。
これは結構素直。
 X= \dfrac {Y-\mu}{\sigma}
と変換出来て、これをf(x)に突っ込みつつ、微分したものを書ければOK。
1点だけ注意は、yの範囲。
変数変換する式 Y=\sigma X + \mu x>0の時の範囲を求めると、 y>\mu となる。
これで確率密度関数は求められる。

次に分布関数だが、これは確率密度関数 \mu < y < \infty の範囲で積分すれば求められる。

感想

この問題はそこまで難しくないです。
ただ、積率母関数のtの範囲問題は気になりますね。

去年の目標振り返りと、今年の目標

みなさんあけましておめでとうございます。2023年も、よろしくお願いいたします。 ということで、去年立てた目標を振り返りつつ、それを踏まえて今年の目標をドドンと書いていこうと思います。

去年の目標と達成度

目標 結果 実績
統計検定1級合格 未達成 未受験。
ブログ10回更新 達成 hatenaブログ15件、Qiita9件。
AWS資格3つ取る 達成 4つ取得。
サウナ50回 未達成 38回。
マネーフォワード毎月ちゃんと付ける 達成 つけた。
kaggleでメダル1つ以上 未達成 コンペ未実施。

このような結果になりました。
6つ中半分は達成できたので、まぁまぁといったところでしょうか。
ここからは、詳細を見ていきます。

統計検定1級合格

こちらは、統計の勉強のモチベーションが0になり、勉強もしなければもちろん受験もしませんでした。
ただ、2023年の1月3日、また統計検定1級モチベが上がっております。

というのも、2022年は仕事に関連した勉強ばかりしていたので、少しそれとは離れた勉強したいな、と思っているからです。
数学、物理、などなどやってみたいと思ってます。
とりあえず、1月から少しずつ勉強を始めようかなと。思います。

ブログ10回更新

hatenaだけで15件、Qiitaで9件、合計24件書けました。目標達成率200%!
Qiitaは、業務で使うような知識をメモするような形で書いてます。
自分の備忘録が最大の目的ですが、世界の数人にぶっ刺さるような記事になればなと思ってます。
例えばこれとか。
qiita.com

ちょっと使い分けどうするかは考え中ではありますが、
業務で調べたことややったことの共有:Qiita
業務外でまとめたことや発信したいこと:hatena
という使い分けにしていこうと思っている所存です。

AWS資格3つ取る

  • AWS Certified Solutions Architect – Associate
  • AWS Certified SysOps Administrator - Associate
  • AWS Certified Solutions Architect - Professional
  • AWS Certified Data Analytics - Specialty

これら4つを取ることができました。まぁ、これは業務内というべきか悩む話題ですが…。

AWSの資格は、楽しく勉強できていいですね。
今年はDeveloperの方もやっていきたいなと思います。

サウナ50回

サウナイキタイで毎回記録しているので、回数が分かります。
2022年は38回となりました。
月ごとの回数のグラフがこちら。

6~11月がかなり落ち込んでいますね。
確かに夏は外気浴があまり気持ちよくないので進んでいく気が少し失せますが、9,10,11月は秋で気持ち良いのでもっと行ってても良いですね。
夏にサウナに行かない生活が染みついて、それが少し影響を受けたものと思われます。
対策としては、定期的にこの曜日のこの時間に行く、というのを決めておこうと思います。
ちょっとまた仕事の打ち合わせなどによって決めますが、とりあえず週1は行きたいですね。

マネーフォワード毎月ちゃんと付ける

こちらはかなり正確につけられました。
変動費の支出部門だと、

  • 食費:100万円
  • 趣味:64万円
  • 交際費:34万円

このあたりが見直しポイントでしょうか。
ただ、余りに絞りすぎても良くないので、食費を少し抑えるくらいで、趣味と交際費はこれくらいでいいのかなと思ってます。
今年は、昇格してさらに年収upも目指したいですね。

kaggleでメダル1つ以上

モチベが0になり、コンペに全く参加すらしませんでした…。
これはサブ目標かな。ただ、↑にも書いた通り、少し業務以外のことをやる年にしたいので、頑張りたいですね。

今年の目標

さて、上記を踏まえて、今年の目標です。
去年は転職したということもあって、仕事関係のことが多かった日々でした。
そのため、今年はそれ以外のこともしたい!
大きく分けると、

  • 健康
  • 趣味
  • (仕事以外の)勉強

の3本柱ですね。

健康

去年の後半はストレッチに通うようになって、かなり身体が柔らかくなりました。
それで思いました。身体は努力すれば変えられる、と。
去年もジムはまぁまぁ行ってました。
記録によると、65回。

こんな感じだったっぽいが、5月どうした。やばいな。
ただ、今年はジムだけでなく外を走るいわゆるランニングも取り入れていきたいと思っています。
せっかくシューズも買ったので!
目標としては、ジムとランニング週1回ずつ。つまり、48回ずつ。
今年はジムだけとはいえ65回だったので、これはかなりチャレンジング。

体重とか体脂肪率とかもしようかと思ったけど、結構上下するからなぁ。
とはいえ、現状の体重67kgからは落としたいので、実家に帰る前12月28日23:59時点での体重64kgを目標にしようかな。

趣味

趣味は、サウナとウイスキー。それに加えて、今年はアニメも観ていきたいと思っています。
サウナは引き続き年50回、ウイスキーは新しいボトルを6本にします。
アニメは…1クール12話として、10クールくらいは見れるかな。

テニスとかそういう趣味もしたかったけど、一人だとできないのがつらいところ。

(仕事以外の)勉強

これね。
とりあえず統計検定1級はマストでやります。
あとは…まぁでもいったんこれでいいかな。
あ、そうだ、iOSのアプリも作りたいんだった!アプリ1つ作ることも目標にしておこう。

それと、書籍を積んでいることが多いので…
読んで、それを記事にすることをしよう。
とりあえず控えめに、6冊目標。

それらを踏まえて、今年の目標

これに決定!!ドドン!

ジャンル 目標
Health ジムとランニングそれぞれ48回
Health 12/28 23:59の体重64kg
Hobby サウナ50回
Hobby ウイスキー新しいボトル6本
Hobby アニメ10クール
Study 統計検定1級合格
Study iOSアプリ1本作る
Study 本を読んで6つのブログ記事書く

8つの目標ですね。ほとんどがプロセス目標ですが、そんなものでしょう。
統計検定1級だけ難易度がずば抜けている気がしますが、頑張っていきまっしょい!!