hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

組織についてのエトセトラ

先日、「HIGH OUTPUT MANAGEMENT」を読んだ。インテルの創業者であるアンドリュー・S・グローブが書いた本で、当時の経営者はみんな読んでいたらしい。他の本で任天堂の岩田元社長などが実践していると書かかれていたワン・オン・ワン*1などはもしかするとこの本が元ネタなのかもしれない。

全体としてはなかなか面白い本ではあるのだけれども、さすがに1980年代に書かれただけあって古臭いところも多い。例えば、第一章の内容はTOC(制約理論)の方がわかりやすいと思うし、計測の重要性が強調される一方でどうやれば計測できるかという説明はまったくない。昨今書かれたものであれば、この本で書かれているような話を前提として、もう一歩進んだ議論がなされていると思う。

とはいえ、変な内容が書かれているわけでもなく、根拠は薄いものの興味深い話もあり、なかなか面白く読めた。しかし、これは問題なのでは、という記述もなかったわけではない。それは、二重所属組織、いわゆるマトリックス組織の推奨だ。

マトリックス組織とは、職能別の組織と事業分野別の組織でマトリックス上に配置し、各社員はふたつの組織に常に属すような組織形態のことを言う。

このマトリックス組織、どうも1980年代には大流行をしたらしいのだが、その後、実際の運用が難しすぎ、大半の企業では廃止されたようだ(今でもやっているのはIBMくらいか)。

マトリックス組織の問題は、誰でもすぐに気付くだろうけれども、上司が二人いることで指示命令系統に競合が発生してしまうことにある。提唱する人々が言うには、二人の上司がうまくコミニケーションを取り協力することでより組織が活性化するはずだ、ということらしいのだが楽天的すぎやしないだろうか。だいたい、上司同士がうまく協力できたとしても、部下からすれば両方の顔色を伺いながら作業をしなければならないのだから非効率の極みである。

とはいえ、ではなぜ、明らかに問題があるマトリックス組織を聡明なグローブが推奨するに至ったのか。不思議に思い、該当箇所を何度か読み返してみた。

ひとつ気付くのは、グローブは必ずしもマトリックス組織を「素晴らしいから導入すべき」と述べているわけではないということだ。むしろ、他の方法では対応できないからセカンド・ベストとして導入するしかない、と書かれている。

なぜ他の方法ではダメなのか。その理由は職能別組織、事業分野別組織というふたつの組織形態は両方とも無くてはならないからだ。システム開発会社を例に考えてみよう。職能別組織の例は営業部、開発部などがそれにあたる。このような組織形態は、社内の人的リソースを職能に応じて特化して管理することで目標設定、評価、教育を効率化するために必要となる。一方で事業分野別組織の例は、プロジェクトと言い換えてもよいだろう。市場の要請、すなわち受注した案件の規模に応じて組織を柔軟に構成することが求められる。どちらの組織形態も重要であり、一方を切り捨てることはできない。

沼上幹組織戦略の考え方」でも触れられているように、職能別組織と事業分野別組織というのは不可分なものではなく、どの会社でも組み合わせた組織形態を取るのが一般的だ。職能別組織を基本としながら、その時々の状況に応じて事業分野の重要度に応じて組織を組み替えるということが行われている。

このとき、どこまで事業分野別組織の組み換えが必要なのかは、その企業が市場のニーズにどこまで迅速な対応を求められるか、によることになる。グローブはインテルでの経験から組織構造が市場ニーズに柔軟に対応できることを目指したということなのだろう。

ここでふと、最近の業績評価の流れとこの議論が関係していることに気がついた。近年、アドビやマイクロソフトなど業績評価そのものをやめ個人への頻繁なフィードバックに変える企業が増えている。Googleのように採用や昇進・昇給を従来の管理職から取り上げ、独立させている企業もある。もしかすると、このような流れは、市場のニーズに沿って事業分野別の組織形態の自由度を高くする(すなわち組織=プロジェクト)ために、職能別組織を解体しようとする動きなのかもしれない。

社内の要請と市場の要請では後者の方が重要なのは自明だろう。市場の要請に応えるための組織はどのような形態を取るべきか。なかなか面白い論点のように思える。


【2017/05/05 追記】

「How google works」で著者らは、組織は独立採算制にせず、機能別組織(この記事で言う職能別組織)にすべだと主張している。その理由として特定のプロダクトで組織化すると、自分の事業部のことだけしか考えなくなり、情報や人々の流れが阻害されることをあげている。

ただし、これは組織化することに共通するデメリットではないかと思う。営業機能を分割することで、技術者は営業のことを考えなくなるし、その逆も同じだろう。いずれにせよデメリットを理解した上で、組織構造は検討する必要があるということではある。

*1:上司と部下の一対一面談を頻繁に行う手法。

「ダメな統計学」お勉強メモ

レックス・ラインハート著「ダメな統計学」は、いわゆるトンデモ統計批判の書ではない。ここで説明されるのは、科学者が意図せず間違って使用している確率・統計の手法についてだ。科学者ならば統計についての知識水準は高いものがあるのだろうと思っていたが、実際にはそうではないようだ。ある論文によれば、公刊されたほとんどの論文に問題があるとのこと。

ダメな統計学: 悲惨なほど完全なる手引書

ダメな統計学: 悲惨なほど完全なる手引書

 

 本書は平易に書かれているので読み進めることはできるのだが、前提となる知識が不足しているため、なかなか理解が難しい。過去、確率・統計には何度か挑戦しているのだが、いまだに分かった感がない。残念ながらこの本を読んでも系統だった理解には程遠い。というわけで、今回は、本書のお勉強メモだと思っていただきたい(誤解している部分もあると思うので、思う所があれば指摘願いたい)。本書には面白い事例の紹介に多くのページが割かれているが、そちらは買って読んでもらうとして、ここでは定義や結論を中心に抜粋(場合により補足)した。

第1章 統計的有意性入門

  • p値:有意確率。仮説検定手法のひとつで、結論が誤っているならば驚くべきことである確率。経験的に、5%有意(p値<0.05)とか1%有意(p値<0.01)で判断する。結果が単一値で求まり便利なため広く使われている。
  • 偽陽性:間違った結論を正しいとしてしまうこと
  • 偽陰性:正しい結論を間違っているとしてしまうこと
  • p値の誤解1:統計的に有意である=効果が大きい、ことを意味するわけではない
  • p値の誤解2:統計的に有意ではない=効果がない、ことを意味するわけではない
  • p値の誤解3:p値=偽陽性率と解釈してはいけない。期待する偽陽性率を有意水準として定め、有意か否かの判断をするためだけにしか利用できない。
  • p値の問題1:同じ観測データを使っても、観測されていないデータの違いで異なる値が出る(問題設定がp値に影響する)
  • 有意性を見たいのであれば、信頼区間を使う方が適切。

第2章 検定力と検定力の足りない統計

  • 検定力:偶然と効果を区別する確率。経験的には、検定力が80%以上あれば良しとされる
  • 小さな効果を調べるには、多くのデータがないと十分な検定力が得られない
  • データが足りないと、分散が大きくなり効果が誇張される
  • データ群にデータ数のばらつきがある場合(例えば、都道府県ごとの人口が影響する調査)は、縮小処理(データ群に対する重み付け)が有効だが、本当に極端な現象が起こっていることを隠してしまう場合がある
  • 効果を見たいのであれば、有意性検定や検定力を見るかわりに、信頼区間を見るべき。有意でも信頼区間の広い結論は解釈が困難なことがわかるし、信頼区間にゼロが含まれていても、狭ければ効果が小さいことを示唆しているのかもしれない。
  • 信頼区間の応用例として、リコメンデーションの機能に信頼区間の下限を重みを使うことで、より適切な評価ランキングが実現できるという例が挙げられている。

第3章 疑似反復:データを賢く選べ

  • 疑似反復:独立していないデータを繰り返し取得すること
  • 交絡因子:有意な結果をもたらす隠れた原因
  • データ数は多くても、独立でないため意味がない。独立でないデータは平均化などの処理を行う必要がある(計測誤差は減るという意味では意味がある)
  • データの入手ルートが異なる場合、系統誤差が発生する可能性がある。主成分分析を行うことで入手ルートごとの偏りを補正することができる。
  • 有意=効果がある、ではない。交絡因子が原因となっている可能性など、きちんと結論を導き出せる実験の設計が必要

第4章 p値と基準率の誤り

  • 基準率:調査対象のうち有効なものが含まれる確率 
  • p値は効果がある場合の確率ではなく、あくまで効果がないとしたら驚くべき結果が出る確率。そのため、調査対象に無効な対象が含まれている場合には、偽陽性の確率が上がり有意であるからといって正しいとは言えなくなる。
  • 何度も同じ調査を繰り返す場合も同じ現象が起こる。
  • 複数回調査した場合はp値を回数で割ることで偽陽性の確率を下げることができるが、検定力が下がる(ボンフェローニ法)。より良い方法としてベンジャミーニ=ホッホベルク法がある。

第5章 有意性に関する間違った判断

  • p値は効果の大きさを表さない。そのため、ふたつの調査対象の比較をするときは、それぞれ単独で調査して算出したp値を比較しても意味がなく、両方を直接比較する必要がある
  • ふたつのグループのそれぞれの平均に統計的有意差があるかを調べる場合には t 検定を使う

第6章 データの二度づけ

  • 大量のデータから有効性の高そうなデータだけを抽出し分析すると、誇張された結果が得られる
  • 特徴的なデータだけを集めると平均への回帰によって、存在しない効果があるかのように見えてしまう
  • 効果が出た時点で調査をやめると、特徴的なデータが多く含まれた状態になりやすいため、誇張された結果が得られる

第7章 連続性の誤り

  • データを不必要に分割して分析するのは偽陽性が増すためやめるべき。回帰分析を使えば、あえて分割して分析する必要がない。
  • どうしても分割したい場合には、コンセンサスのある外部の基準に従うこと。データを上手く分離できる最適な基準を選ぶと、p値が良い分割となり誇張された結果が得られてしまう。

第8章 モデルの乱用

  • データに比べ変数の数が多い場合、過剰適合が起こる。
  • 重要な変数を選んでいく段階的回帰(ステップワイズ法)は、何度も比較する場合と同様、偽陽性が発生し、過剰適合が起こりやすくおすすめできない。変数を選ぶ基準に赤石情報量規準(AIC)やベイズ情報量規準(BIC)を使うとある程度過剰適合を抑えることはできる。
  • データを教育用と検証用にわけ交差検証を行うと過剰適合しているかの確認が可能。
  • 相関と因果は違う。
  • シンプソンのパラドックス:全体の傾向と部分の傾向では異なる場合がある
  • ランダム化試験なしに交絡因子を防ぐことはできないが、一方でランダム化試験が現実的にはできない場合も多い

第9章 研究者の自由:好ましい雰囲気?

  • 研究者はデータや手法だけでなく分析目的すらも自由に選ぶことができる。そのため、結果として研究者にとって都合の良い結果を導きやすいというバイアスがある。
  • 探索的研究と確認的研究を混同すべきではない。研究目的、手法を決めてから分析をするべき。

第10章 誰もが間違える

  • 統計手法に長けていない問題以前に、そもそもp値を正しく計算できていないケースも多い(「ネイチャー」掲載論文の38%でp値に誤字や掲載間違いがあったそうだ)
  • 再現できない研究成果も多い。医学で最も引用されている研究論文の四分の一が刊行後に再試験されておらず、三分の一が後で誤りか誇張されていることが発覚している。

第11章 データを隠すこと

  • データを公開しないことで論文の問題を隠す場合がある。
  • 効果がない、という研究は発表されにくいため、メタ分析をすると効果がある方に偏りが生じてしまう。

第12章 何ができるだろうか

  • p値を使わず信頼区間と効果量推定を使え。
  • まじめに学ぶには時間がかかるので統計学者を外注しろ。

読後の感想

  • 確率統計よくわからんなぁ、と思っていたがみんなわかっていないのだということがわかって安心した(おい)
  • 時系列分析とか正規分布でない場合の注意事項について知りたかったのだけど、載っていなかったのが残念。

 

新・工数見積りの海を彷徨う

前回までのエントリにて、IPAソフトウェア開発データ白書 2014-2015 を元に機能数から工数見積りを行う方法について検討してきた。

先日、IPAソフトウェア開発データ白書 2016-2017が公開されたため、改めて数値の算出を行おうと思う。ただ、前回と同じことをやっても面白くないので、前々から試してみたかった標準工期からの乖離度をパラメータに加えてみることにしてみた。

先に言っておくと、これが意外なほどうまくいかない。標準工期に比べて短納期になるほど機能数に比べ工数が大きくなるように思えるが、実際のデータを散布図で見てみるとまったくそんなようには見えない。

f:id:hidekatsu-izuno:20161221225506p:plain

標準工期からの乖離率で調整した工数を使いロバスト回帰をかけてみたが、結果は同様で、むしろ工期の乖離を考えないほうが残差が少なかったりする。

というわけで、最終的には標準工期からの乖離率は考えないことにした。前年のデータと比べると次の通り前回の数値より一割ほど上振れしている。

工数[開発5工程/人時]=131.33×画面数+78.55×帳票数+61.29×バッチ数

機械学習をさらに理解する

前回のエントリで機械学習とは空間に線を引く作業に他ならないと書いた。これはこれで正しいとは思うのだけれど、さらに調べていくと例外も当然ある。具体的にはベイズ統計を用いた機械学習モデルがそれにあたる。

古典的な確率論では、誤差に分布があるだけで、真の境界は線上にあると考えるが、ベイズな世界では、境界線自体に分布がある状態こそが真であると考える。だから、出力となる結果は値ではなく確率分布となる。

とはいえ、線が確率分布となるだけなので、脳内イメージ的には、ぼんやりとした線が引かれると考えればそう大きな飛躍があるわけではない。

ベイズ的な確率論を含めた機械学習では、機械学習を「識別関数」「確率的識別モデル」「確率的生成モデル」に分類して説明するのが一般的なようだ。「識別関数」と呼ばれるものが古典的な確率論をベースにした機械学習法、「確率的識別モデル」「確率的生成モデル」はベイズ的な確率論がベースとしたモデルだ。「確率的識別モデル」が条件付き確率分布を直接推定するのに対し、「確率的生成モデル」は、データの尤度と事前確率分布を推定し、そこから条件付き確率分布を導出するものを言う。

「識別関数」も対ベイズとしてはひとつにまとめられているが、「線形識別関数」、線形識別関数に非線形変換を組み合わせた「間接的非線形識別関数」、直接的に非線形識別関数を推定する「直接的非線形識別関数」の三種類に分類できるようだ。

ただ、このように分類したところで、どれがどのように良いのかと言われるとよくわからないところがある。線形よりは非線形の方がより細かい分類が可能だろうとか、ベイズ確率のほうがより現実的な感じもする、といった感覚はあるのだけれど、こういう問題にはこの方法を使うべき、という指針らしきものはあるのだろうか。

機械学習を理解する

機械学習には昔から興味がありSVMとかちょくちょく調べてはいたのだけど、体系的理解がなく、全体としてはもやもやした感想を持っていた。

先日、特にきっかけがあったわけでもないのだけれど、急に思いたち機械学習で用いられる手法を整理すれば何かわかるのではないかと、いろいろ調べてみた。

まず、機械学習がどのような目的に用いられているかを調べるのがいいのでは思い機械学習チートシートをひとつひとつ紐解いていくと、概ね次のようなものに集約されることが見えてきた。

最初は、この目的と教師あり/教師なし/強化学習を組み合わせればパターン分けできるのではないか、と思ったのだけれどもどうにもしっくりこない。クラス分類で用いられる手法は概ね回帰でも利用できたりするし、異常検出に至っては他の目的の応用例ともいえるくらい多様な手法が導入されている。

いろいろ考えてみた結果、見方を変える必要があるという気になり、最終的に落ち着いたのが次の説明となる。

  • 機械学習とは、入力データをうまく分割できるよう、空間に線を引く作業に他ならない
  • 分割した線上の値に注目するのが回帰分析(予測)
  • 分割した領域に注目するのが識別(クラス分類やクラスタリングなど)

2クラス分類であれば一本の線を引けばよいし、複数クラス分類についても、複数本の線を引くだけのことだ。線を引くということは関数のパラメータを推定する、ということに他ならないわけだから最終的には機械学習とは、

  • 入力データをうまく分割する関数のパラメータを推定する

ということを意味することになる。この説明のよいところは、教師あり/教師なし/強化学習の意味合いも教師データの違いとして説明可能なところだ。

  • 入力データと出力データの組から関数のパラメータを推定するのが教師あり学習
  • 入力データと分割終了条件から関数のパラメータを推定するのが教師なし学習
  • 入力データと出力データの評価の組から関数のパラメータを推定するのが強化学習

学習というとフィードバックがあるかのような前提を想定してしまうが、フィードバックのありなしはオンライン学習(あるいはミニバッチ学習)が可能か、という手法の問題であって本質的な話ではない。

だから何だ、という話に感じる人もいるかもしれない(し、実は全然間違っている説明なのかもしれない)けれども、私の中ではうまく整理できたような感覚を持った。人工知能と言うと何かすごいもののような気もするけれど、その内実は関数近似の延長線上の話なんだ、と考えるとちょっとはわかった気になれるというものだ。

データモデリング・テクニック

社内勉強会用に流用するつもりではあるんだけど、一度データモデリングについては考えをまとめておきたかったので、資料化してみました。

 データモデリングについては、昔読んだ本を読み返したりもしたのだけど、なんとなく共通的な基盤がありながらも、これが標準と言えるような方法論がないのが難しいところ。私個人としては、「楽々ERDレッスン」の著者の羽生章洋さんがWeb+DBプレスに書いていた記事とか当時のブログに強く影響を受けました。

自分の考えが絶対に正しいというつもりはないんだけど、わりとトラディショナルな考え方をベースにいろんな人のノウハウっぽいものを詰め込んで書いたので、新人向けの教育資料としては手頃なんじゃないかと思ったりもしています。

まぁ、データモデリングは関しては、強い意見を持っている人も多いとは思うので、ご意見あればこのブログなりTwitter なりにお寄せいただければ、と。

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

 

 [2016/10/24追記] 用語の説明が足りてなかったところや非正規化の補足を追加しました。 

「科学が役に立つ」について思うこと

ノーベル医学・生理学賞の受賞が決まった大隅教授の

「科学が『役に立つ』という言葉が社会を駄目にしている。本当に役立つのは100年後かもしれない。将来を見据え、科学を一つの文化として認めてくれる社会を願っている」 

 という言葉が注目を集めている。とはいいつつも、科学系で日本人がノーベル賞受賞すると毎度同じようなことは言っている気はするけれど。

私も理工系の出身なので、その意見には賛同したい気もするのだけれど、やっぱり間違ってるよなぁ、と思ってしまう。この手の言い分は「企業は利益のためだけではなく、周辺社会や従業員の生活のためにも存在している」に通底するように思う。

例えば、誰から見ても一点の曇もなく役に立たない研究があったとしよう。具体的に思いつかなければ、「トリビアの泉」で紹介されるトリビアの種をひとつ念頭に置いていただきたい。通常、大学の教授ともなれば、1000万円程度の年収はあるだろう。この誰から見ても言っての曇りもなく役に立たない研究に政府は、年間1000万円を拠出しても構わないだろうか。日本にも貧困に苦しむ人はいくらでもいる。その人に渡した方がいいかもしれない。

文化として認めてほしいという言葉にも微妙なところがある。夜這いのようにすでに滅びた日本文化もあれば、一部のイスラム教国に見られる非人道的な規則も文化といえば文化だ。ゲームやアニメのように、かつては文化として認められなかったものが文化として浸透する場合もある。文化とは人々が自然と培っていくものであり、認めてもらえるようお願いするものではないように思う。

企業の目的は「収益を最大化すること」だ。だから、周辺社会や従業員の生活に気をかけるのは、そうすることが最終的には自社の利益に繋がるからと考えるのが筋だろう。

同じように、科学者は「私には今は思いつかないけれど、長い目でみれば役に立つんです。こういう地道な研究が社会の生産性を向上させるんです」というべきなのではないだろうか。一見、直接的には役には立たなそうな宇宙科学や歴史学であっても、多くの人の知的好奇心を満たすのであれば、経済学的な考えに沿って人々がその知的好奇心に支払ってもよいと考える金額に相応した費用を投じることは正当化できる。

言い方だけの問題かもしれないけれど、科学者にはもっと自信を持って「役に立つんです」と言ってほしいと個人的には思うのだ。