一般化平均の証明を丁寧に書いてみる

「平均って何?」と質問されたら、ほぼすべての人は、
「すべての数値を足して、数値の個数で割った値のこと」と答えると思います。
数式で書けば、n個の数値、a_1, a_2, ..., a_nに対して、
\mu=\displaystyle\frac{a_1+a_2+\cdots +a_n}{n}
で定義された値\muを「平均」と呼ぶでしょう。
JIS Z 8101-1:1999では、

2.13(算術)平均,平均値(さんじゅつ)へいきん,へいきんち
arithmetic mean, average
観測値の総和を観測値の個数で割ったもの。

のように定義されています。

様々な平均

実は、JISの表記にもある通り、この平均は「算術平均」とも呼び、また「相加平均」とも呼びます。
何故単純に「平均」(または「平均値」)と呼ばないかと言えば、
この定義以外にも「平均」と名の付くものが存在するからです。

代表的なところでは、

  • 相加平均(算術平均)
  • 相乗平均(幾何平均)
  • 調和平均

の3つでしょうか。
それぞれの定義は、下表のようになります。

名称 定義式
相加平均(算術平均) \mu=\displaystyle\frac{\displaystyle\sum^n_{i=1}x_i}{n}
相乗平均(幾何平均) \mu_G=\sqrt[n]{\displaystyle\prod^n_{i=1}x_i}
調和平均 \mu_H=\displaystyle\frac{n}{\displaystyle\sum^n_{i=1}\frac{1}{x_i}}

※参考ページ:平均 - Wikipedia

一般化平均

実は、平均にはより一般的な定義があり、これを「一般化平均」と呼びます。
一般化平均は、以下の式で定義されます。
\mu_m=\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m

一般化平均の定義式について、m=1とすると、
\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^1\right\}^\frac11=\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}=\displaystyle\frac{\displaystyle\sum^n_{i=1}x_i}{n}
となり、これは相加平均となります。

また、m=-1とすると、
\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^{-1}\right\}^\frac1{-1}=\displaystyle\frac{1}{\displaystyle\frac1n\displaystyle\sum^n_{i=1}\frac{1}{x_i}}=\displaystyle\frac{n}{\displaystyle\sum^n_{i=1}\frac{1}{x_i}}
となり、これは調和平均です。

更に、定義上、m=0とすることはできませんが、m\rightarrow0とすると、相乗平均になります。
つまり、
\displaystyle\lim_{m\rightarrow0}\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m=\sqrt[n]{\displaystyle\prod^n_{i=1}x_i}
となる…のですが、これだけ見ても「ホント?」と思ってしまうでしょう。
特に、一般化平均には和の記号\sumがあるのに、m\rightarrow0としたら積の記号\prodになるなんて、とても信じられません。

というわけで、本記事では、
\displaystyle\lim_{m\rightarrow0}\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m=\sqrt[n]{\displaystyle\prod^n_{i=1}x_i}
となることを、下記Webページを参考に、やや丁寧に証明します。
d.hatena.ne.jp

指数と対数の関係

M=a^{\displaystyle\log_aM}
証明
左辺の\log_aをとると、\log_aM
右辺の\log_aをとると、\log_a{a^{\displaystyle\log_aM}}=\displaystyle\log_aM\cdot\log_aa=\log_aM
よって、(左辺)=(右辺)となるので、M=a^{\displaystyle\log_aM}

ちなみに、f(x)=a^xg(x)=log_a{x}が逆演算であることを考えれば、
a^{\displaystyle\log_aM}=f(g(M))=f\circ g(M)=M
なので、自明という説明もできなくはない。

なお、特にa=eとし、\log_e\lnと表記すれば、M=e^{\displaystyle\ln M}となる。

証明

\displaystyle\lim_{m\rightarrow0}\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m=\sqrt[n]{\displaystyle\prod^n_{i=1}x_i}
を証明する。

左辺の極限の中
\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m
を変形すると、指数と対数の関係より、
\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m
=\left\{e^{\displaystyle\ln{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)}}\right\}^\frac1m
=e^{\displaystyle\frac{1}{m}\ln{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)}}
となる。
ここで、\ln{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)}mに関する関数と考え、f(m)とおくと、
f(m)マクローリン展開が可能である。

f(m)の1回微分は、合成関数の微分法を用いて、
\displaystyle\frac{\mathrm{d}}{\mathrm{d}m}f(m)
=\displaystyle\frac{1}{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m}\cdot\displaystyle\frac1n\displaystyle\sum^n_{i=1}({x_i}^m\cdot\ln{x_i})
=\displaystyle\frac{\displaystyle\sum^n_{i=1}({x_i}^m\cdot\ln{x_i})}{\displaystyle\sum^n_{i=1}{x_i}^m}
となるので、f(m)を1次の項まで展開すると、
\displaystyle\ln{\left(\frac{1}{n}\displaystyle\sum^n_{i=1}{x_i}^m\right)}
=\displaystyle\frac{\displaystyle\ln{\left(\frac{1}{n}\displaystyle\sum^n_{i=1}{x_i}^0\right)}}{0!}+\displaystyle\frac{\displaystyle\frac{\displaystyle\sum^n_{i=1}({x_i}^0\cdot\ln{x_i})}{\displaystyle\sum^n_{i=1}{x_i}^0}}{1!}m+\Omega(m^2)
=0+\displaystyle\frac{\displaystyle\sum^n_{i=1}\ln{x_i}}{n}m+\Omega(m^2)
となる。ここで、\Omega(m^2)は、mに関する次数2以上の多項式であることを意味している。

ゆえに、
\displaystyle\lim_{m\rightarrow0}\left\{\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right\}^\frac1m
=\displaystyle\lim_{m\rightarrow0}e^{\displaystyle\frac{1}{m}\ln{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)}}
=\displaystyle\lim_{m\rightarrow0}e^{\left(\displaystyle\frac{\displaystyle\sum^n_{i=1}\ln{x_i}}{n}+\displaystyle\frac{\Omega(m^2)}{m}\right)}
=e^{\displaystyle\frac{\displaystyle\sum^n_{i=1}\ln{x_i}}{n}}
=\sqrt[n]{e^{\displaystyle\sum^n_{i=1}\ln{x_i}}}
=\sqrt[n]{e^{\displaystyle\ln{\displaystyle\prod^n_{i=1}x_i}}}
=\sqrt[n]{\displaystyle\prod^n_{i=1}x_i}
となり、題意は示せた。

マクローリン展開可能であることの証明

ところで、上記証明内で、しれっと「f(m)マクローリン展開が可能であり」なんて書きましたが、
全ての関数がマクローリン展開可能であるわけではないことを考えると、やはり確認しておきたいところです。

マクローリン展開が可能であることの証明は、
テイラーの定理における余剰項においてx=0とした
R_n(x)=\displaystyle\frac{f^{(n)}(0)}{n!}x
n\rightarrow \inftyの時に0に収束することを示せばOKです。

そこで、先ほどのmに関する関数
f(m)=\ln{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)}
の余剰項R_n(m)の具体的な式を明らかにすることから始めます。
対数関数\ln{x}n微分
\displaystyle\frac{\mathrm{d}^n}{\mathrm{d}x^n}\ln{x}=\displaystyle\frac{(-1)^{n-1}(n-1)!}{x^n}
となる。
よって、y=\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^mとおけば、
f(m)=\ln{y}となるので、f^{(n)}(m)は、
f^{(n)}(m)
=\displaystyle\frac{\mathrm{d}^n}{\mathrm{d}m^n}\ln{y}
=\displaystyle\frac{\mathrm{d}^n}{\mathrm{d}y^n}\ln{y}\cdot \displaystyle\frac{\mathrm{d}^n y}{\mathrm{d}m^n}
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{y^n}\cdot \displaystyle\frac{1}{n}\sum^n_{i=1}{\left({x_i}^m(\ln{x_i})^n\right)}
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^m\right)^n}\cdot \displaystyle\frac{1}{n}\sum^n_{i=1}{\left({x_i}^m(\ln{x_i})^n\right)}
となる。
従って、m=0とすれば、
f^{(n)}(0)
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{\left(\displaystyle\frac1n\displaystyle\sum^n_{i=1}{x_i}^0\right)^n}\cdot \displaystyle\frac{1}{n}\sum^n_{i=1}{\left({x_i}^0(\ln{x_i})^n\right)}
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{1^n}\cdot \displaystyle\frac{1}{n}\sum^n_{i=1}{\left((\ln{x_i})^n\right)}
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{n}\sum^n_{i=1}{\left((\ln{x_i})^n\right)}
となる。
これを用いて、余剰項R_n(m)
R_n(m)=\displaystyle\frac{f^{(n)}(0)}{n!}m^n
=\displaystyle\frac{(-1)^{n-1}(n-1)!}{n\cdot n!}\sum^n_{i=1}{\left((\ln{x_i})^n\right)}m^n
=\displaystyle\frac{(-1)^{n-1}}{n^2}\sum^n_{i=1}{\left((\ln{x_i})^n\right)}m^n
となる。
よって、\displaystyle\lim_{n\rightarrow \infty}\displaystyle\frac{(-1)^{n-1}}{n^2}=0なので、
余剰項R_n(m)n\rightarrow \inftyの時に0に収束するためには、
\displaystyle\lim_{n\rightarrow \infty}\displaystyle\sum^n_{i=1}{\left((\ln{x_i})^n\right)}
が発散しないことを示せばよい。

プロジェクトマネージャ試験の午後1の本番でやったこと

プロジェクトマネージャ試験の午後1の本番で私がやったことを、
問題用紙を見ながら説明してみようと思います。

午後1の問題は「S→ぐ→W」で解ける

小見出しにあります「S→ぐ→W」ですが、これは私が高校生のころ受けていた現代文の授業で、
代ゼミの笹井講師が毎回のように掲げていたフレーズです。
3つの文字は

  • S:主語は?
  • ぐ:具体的に言うと?
  • W:なぜ?

であり、この順で現代文の問題に当たれば解ける、というものです。

今回、午後1の問題で、最初から「S→ぐ→W」を使おうとしていたわけではありません。
問題を解く中で、設問と本文を行き来するのが面倒で、
本文の方に設問を端的にメモしたのが始まりでした。

例えば、今回(H31)の問2の設問2 (1)の問題は、以下のようなものでした。

〔プロジェクトマネジメントの要素のリスクへの対応〕について,(1),(2)に答えよ。
(1)本文中の下線②について,H課長が考えた,G社プロジェクトが遅延するリスクがG社に与える非常に大きな影響とは,具体的に何を指すか。35字以内で述べよ。

このとき、私は、本文の下線②にある「非常に大きな影響」を丸で囲み、余白まで線を引っ張り、「ぐ」と書きました。
こうすることで、いちいち設問を見直すことなく、本文の方に集中できる効果がありました。
f:id:stacked-tip:20190425210807j:plain
以下、同じように、

  • 下線③の「人選」に「どのような?」とメモ
  • 下線④全体に「なに?」のメモ
  • 下線⑤全体に「なぜ?」のメモ
  • 下線⑥の後にある「確認すること」に「なに?」のメモ

を書いていき、各々の設問の答案を作っていました。

改めてこの時の設問の文末に注目してみると、

  • 設問1:「~のはなぜか。」
  • 設問2
    • (1):「~具体的に何を指すか。」
    • (2):「~どのような人選か。」
  • 設問3
    • (1):「~とは何か。」
    • (2):「理由は何か。」
    • (3):「~確認したことは何か。」
  • 設問4:「特性とは何か。」

となっており、結局

  • これは何?
  • 具体的には?
  • それはなぜ?

の3つしかないことに気づきました。
他の2問についても、基本的にはこの3つに集約できる設問だったので、
きっと、過去の問題についても同じなのではないかと思います。
(スイマセン、未確認です)

問題点のある表現にはマークすること

これは、今回私が使ったテキスト、ITのプロ46『うかる!プロジェクトマネージャ2019年版』でも使われている手法です。

否定的表現や違和感を覚える部分などを含め,問題点を見つけたら,ほぼ必ず設問に関係してくる。
したがって,わかるようにマークしておこう。
(p258)

問3の本文では、問題点のある表現にひたすら「マイナス記号」をメモしていきました。
f:id:stacked-tip:20190425210935j:plain

  • 「担当者が認識する品質と実際の品質との間にギャップ」をチェック
  • 「初回のレビュー実施時期は,レビューイの判断で決定」をチェック
  • 「チームメンバがクリティカルパス上の活動を認識していない」をチェック

こうすると、設問を解くタイミングで、最初にチェックポイントを確認するようになり、
効率的に答案を作れるようになりました。

やはり問題用紙にガシガシとメモを書いていった方が、答案を作りやすかったと感じています。
演習時にわざわざ紙に印刷して解くのは、あまり現実的ではないですが、
問題用紙にメモをするイメージで解いてみるといいかもしれません。

プロジェクトマネージャ試験を受験してきました

本日4月21日、IPAのプロジェクトマネージャ試験を受験してきました。
ひとまず速報として、ざっくり内容について書こうと思います。
なお、昨年の秋季にシステムアーキテクト試験に合格しているので、午前1は免除でした。

午前2

例年どおり、40分で25問の4択問題に回答するマークシート方式でした。
半分弱くらい(ネット上では25問中10問とも)過去問流用でした。
特に計算問題が25問中2問しかなく、そのうち1問は過去問流用だったので、私は15分くらいで一通り解き切ってしまい、見直しをしたり、答えを暗記していた問題について、何でそうなるんだろうとか考えたり(例えば問9の生産性の問題)していました。
何ぶん午前2は途中退出ができないので。

(2019/4/22追記ここから)
解答が公開されましたね。
21/25=84%なので、午前2はクリアでした。
(2019/4/22追記ここまで)

午後1

こちらも例年どおり、3問中2問選択して解く記述式でした。
3つをばーっと流し見し、問1の図が何か嫌だな、というそれだけの理由で、問2と問3を選択しました。

問2は「IoTを活用した工事管理システムの構築」というテーマで、
納期必達のプロジェクトで、いくつかのリスクに対応するというものでした。
話としてはよくあるパターンでしたが、答案の文を作るのに少し苦労しました。
とは言え、30分くらいで書き終え。

問3は「プロジェクトの定量的なマネジメント」というものでした。
いわゆるKKD(勘・コツ・度胸)でシステム開発しているところに、定量的なマネジメントを普及されていく話。
この問題はストーリーがとても良く、個人的には良問でした。
是非IPAのWebサイトで問題だけでも読んでほしいです。
PM業やっている人にとっては当たり前のことかもしれませんが、「PMとは単に手法を運用するだけではなく、こういうことも気にするんだぞ」というのが心に沁みます。
平成31年度 春期 プロジェクトマネージャ試験 午後I 問題


2問で60分弱、10分くらい見直ししていましたが、流石に飽きてきたので途中退出しました。

午後2

やってきました高度試験の総本山、2時間で最低でも2000文字以上書かなければならない論述式。
ここ数年は2問中1問を選択する形で、両方とも不得手なテーマだと即死する、少し運ゲー的です。
特にこの2問制になってからは組み込み系問題が全く出ず、組込み出身の私にはとっては、本当に出題テーマ次第で合否が決まってしまう感じでした。
それでも一応は8問くらい過去問を解きました(詳しくは別記事で)。

さて今年はどうだったかと言えば、
問1はコストに関する問題。私はそもそもPM経験がないのでコストなんて考えたことなどなく、最初の文を読んで即パス。
運命の問2は…「システム開発プロジェクトにおける、助言や他のプロジェクトの知見などの活用」。
これ、過去問演習で解いた、平成17年問1の「プロジェクトにおける重要な関係者とのコミュニケーションについて」で同じようなことを書いたぞ。この時に使ったネタもそのまま使えそうだ。
正直、これは行ける、と思いました。

後は前回のシステムアーキテクト試験の時と同様、
30分でストーリー構成を考え、残りの90分でひたすら書く、という戦略で進みました。
ネタも半分以上実話だったこともあり、ストーリーの破綻もほとんどなく、妄想を練る必要もあまりなく、大コケすることなく最後まで書き上げられました。
それでも時間はぎりぎり、問ウからは時計を見ながら汚い字で600字ちょっとまで書きとおし、書き終えた時点で残り10分で、今回も途中退出ならず。
見直し、わずかな書き足し、汚い字の修正をし、時間が来ました。

今回は大変運が良かったと思います。どうせなら合格していてほしいですね。

プロジェクトマネージャ試験の午前2の過去問演習をする

プロジェクトマネージャ試験の午前Ⅱの対策は、
過去問演習が最適と言われています。

それは、出題される午前問題の何割かは、過去問がそのまま出るからです。

今回は、下記のWebサイトを紹介いたします。

www.pm-siken.com

私も、このサイトで演習して対策します。

プロジェクトマネージャ試験の午後2問題のタイトル整理

プロジェクトマネージャ試験の、午後Ⅱの問題はどのような分野から
出ているのかを調べるために、IPAのWebサイトから、
平成21年以降の過去問を見てみることにしました。

具体的には、午後Ⅰの2問(平成25年以前は3問)の最初の一文を
ピックアップしてみました。これで、大雑把な傾向は掴めるかなと思います。

過去問はこちらから:
IPA 独立行政法人 情報処理推進機構:過去問題

午後Ⅱの問題のタイトル

H30PM2

Q1: システム開発プロジェクトにおける非機能要件に関する関係部門との連携
Q2: システム開発プロジェクトにおける本稼働間近で発見された問題への対応

H29PM2

Q1: システム開発プロジェクトにおける信頼関係の構築・維持
Q2: システム開発プロジェクトにおける品質管理

H28PM2

Q1: 他の情報システムの成果物を再利用した情報システムの構築
Q2: 情報システム開発プロジェクトの実行中におけるリスクのコントロール

H27PM2

Q1: 情報システム開発プロジェクトにおけるサプライヤの管理
Q2: 情報システム開発プロジェクトにおける品質の評価、分析

H26PM2

Q1: システム開発プロジェクトにおける工数の見積りとコントロール
Q2: システム開発プロジェクトにおける要員のマネジメント

H25PM2

Q1: システム開発業務における情報セキュリティの確保
Q2: システム開発プロジェクトにおけるトレードオフの解消
Q3: システム開発プロジェクトにおける工程の完了評価

H24PM2

Q1: システム開発プロジェクトにおける要件定義のマネジメント
Q2: システム開発プロジェクトにおけるスコープのマネジメント
Q3: システム開発プロジェクトにおける利害の調整

H23PM2

Q1: システム開発プロジェクトにおけるコストのマネジメント
Q2: システム開発プロジェクトにおける品質確保策
Q3: システム開発プロジェクトにおける組織要員管理

H22PM2

Q1: システム開発プロジェクトのリスク対応計画
Q2: システム開発プロジェクトにおける業務の分担
Q3: システム開発プロジェクトにおける進捗管理

H21PM2

Q1: システム開発プロジェクトにおける動機付け
Q2: 設計工程における品質目標達成のための施策と活動
Q3: 業務パッケージを採用した情報システム開発プロジェクト

プロジェクトマネージャ試験の午後1問題のタイトル整理

プロジェクトマネージャ試験の、午後Ⅰの問題はどのような分野から
出ているのかを調べるために、IPAのWebサイトから、
平成21年以降の過去問を見てみることにしました。

具体的には、午後Ⅰの3問(平成25年以前は4問)の最初の一文を
ピックアップしてみました。これで、大雑把な傾向は掴めるかなと思います。

過去問はこちらから:
IPA 独立行政法人 情報処理推進機構:過去問題

午後Ⅰの問題のタイトル

H30PM1

Q1: SaaSを利用した営業支援システムを導入するプロジェクト
Q2: システム開発プロジェクトの品質管理
Q3: 情報システム刷新プロジェクトのコミュニケーション

H29PM1

Q1: 製造実行システム導入プロジェクトの計画作成
Q2: サプライヤへのシステム開発委託
Q3: 単体テストの見直し及び成果物の品質向上

H28PM1

Q1: プロジェクトのリスク管理
Q2: プロジェクトにおけるコミュニケーション
Q3: プロジェクトの進捗管理及びテスト計画

H27PM1

Q1: 生産管理システムを導入するプロジェクトの、ステークホルダマネジメント
Q2: ソフトウェアパッケージの導入
Q3: システムの再構築

H26PM1

Q1: 人材管理システムの構築
Q2: プロジェクトの進捗管理
Q3: 生産管理システムの再構築

H25PM1

Q1: 設計ドキュメント管理システムの開発プロジェクト
Q2: プロジェクト計画の策定
Q3: システム開発プロジェクトの企業合併に伴う計画変更
Q4: ソフトウェア開発の遂行

H24PM1

Q1: 外部設計の状況確認
Q2: プロジェクトの立て直し
Q3: EVMによるプロジェクト管理
Q4: 組込みシステム開発結合テスト計画

H23PM1

Q1: システム開発プロジェクトにおけるスケジュール管理
Q2: 基幹システムの再構築
Q3: システムの再構築
Q4: プロジェクトの評価

H22PM1

Q1: 新システムの構築
Q2: 会計業務においてEUCからWebアプリケーションシステムへ移行するプロジェクト
Q3: システム再構築
Q4: 請負契約の見積り

H21PM1

Q1: プロジェクトのリスク管理
Q2: 外部委託先の選定
Q3: プロジェクト推進方法の見直し
Q4: ソフトウェア開発の品質管理

平成25年以前の4問中2問選択制の頃は、第4問目は組込み系だったのですね。
知りませんでした。

micro:bitでシリアル通信をしてみた

前々から気になっていたmicro:bitを購入してみました。
micro:bitとは、英国BBCが児童向けプログラミング教育のために製作した、マイコン実装されたボードです。

開発環境は何種類かありますが、今流行りのブロックプログラミングインタフェースのMicrosoftのonline IDEを使って、一通り遊んでみました。

makecode.microbit.org


micro:bitは実務で使用できないのか?

児童・生徒相手のプログラミング教育の用途以外に、micro:bitは使用できないのだろうか?
具体的には、大学や企業の研究開発にmicro:bitを使用することはできないのだろうか?

研究開発に使用するためには、最低限、データログが取れることが重要だと考えます。客観的に評価を行うには、やはりデータが大事です。特に、

  • 高精度なログを
  • 安定的に出力

することが大事でしょう。

micro:bitの通信機能

micro:bitでは

  • シリアル通信(USBorGPIOピン)
  • BLE通信

ができます。

上記要件を考慮して、まずはUSBを用いたシリアル通信をやってみることにしました。

やってみた

makecode.microbit.org


Aボタンを押すと、その時の時間を回数を送信します。
時間は、micro:bitが起動してからの時間を、ミリ秒単位で出力します。

Tera Term VTで受信した結果は、以下のような感じです。 

f:id:stacked-tip:20181228202722p:plain

これくらいであれば、micro:bitでできます。