2020年2月21日金曜日

失敗できないプロジェクト 〈急所〉

プロジェクトの “急所” 、一つ挙げるとしたらどこでしょうか? プロジェクト計画、要件定義、設計、開発、テスト


どれも大切ですが、問題が表に出てくるのは “テスト” ですよね。結合テスト、システムテストでこんな問題が起きることがあります。

1.テストに入れない(プログラム がない!、ファイル、テーブル がない)
2.テストに入れない(テスト仕様書がない!
3.テストに入れない(環境がない!、時間枠がない)

1番目のケース、まさかそんな!と思われますよね。でも開発の遅れで一部プログラムが揃っていないということは経験があると思います。影響のないところからテストをはじめます。またテストを始めた途端、仕様の取り違えが判明しテストにならない、ということもあるでしょう。結合テスト段階で単体テストのバグが出るというケースです。そもそも取りこぼしでプログラムを作っていなかった、リリース期日の間違え、もあるでしょう。
規模が大きくなる程、この手の初歩的なミスが増えます。

プログラムができるまでは、ドキュメントベースで確認するしかありません。要件定義書、設計書など何百ページもあるドキュメントを目検していく訳なので、ベテランであっても一定割合で、ある、なしレベルのミスが発生します。

発生割合ですが、さすがに全体の10%ということはありませんが、0.1%ということもありません。感覚的に1%はありますね。2%前後はあってもおかしくないと考えておくのが相場です。

結合テストからシステムテストと進むにつれ、ある、なし レベルのミスは全体の足を引っ張ります。影響のおよぶ範囲のテストを止めてしまいます。ミスは避けられません。早い段階で露見させるのが賢い対策です。PM(プロジェクトマネージャ)、PMOの真価は課題対策にあります。

“仮組み”
そこで開発中であっても、週の最後に、出来ている分だけ、ある分だけのプログラムを集め、中途半端なデータベースにつないでしまうのですね。私はよくやりました。ポイントは集めるにあります。
ビルドエラーも出ます。マスターのコード定義もありません。初めは動きません。それでも無いものが分かるので
「来週これは作る予定だよね?」
と確認できます。そこでドキッとします。
「忘れるところでした(本当は、忘れていました)」
というふうに。

アジャイルだと、頻繁にビルドをしているので、ある、なしレベルのミスは防止できますね。限られた時間と集中力を設計開発に回せるのは利点です。

“仮組み” はウォータフォール開発や基幹系システムでもおすすめです。「忘れている」というと、担当者に対する落ち度の指摘です。指摘された方は気分のいいものではありません。指摘する側も、言いたくて言っている訳ではありません(言いづらいです)。人間同士お互いの負の感情はコミュニケーションを阻害します。できれば避けたいものです。

 “仮組み” は「ある」「なし」を見えるようにしています。担当者が「忘れていた」ことに違いはありませんが、指摘は、仮組み環境を経由した間接的なものになります。同じことでも人から直接指摘された時のような負の感情は生じないか弱いものになります。

見える化」とか「可視化」は問題発見の効率化と合わせて、担当者の前向きな行動や、グループのコミュニケーションを維持する効用があるのではないでしょうか。

仮組み” 試してみてはいかがでしょうか。
永島志津夫

全社のシステムを少ない人数で見ていれば時に見落としもあるかもしれません。
オフィスエヌ ショートレビュー5万円から。
連絡先 office.nagasima#gmail.com (#を@に変えてメールをお願い致します



2020年2月12日水曜日

失敗しない要件定義 その4 〈議事録 テンプレート〉

失敗しない要件定義その4 は 議事録のテンプレート、書式です。ワードとPDFファイル版をアップしておきます。

シンプルですが、構成と大事なポイントは私がフューチャーアーキテクトにいた頃から20年以上変わっていないのでご安心を。


こちらです。議事録(MSワードPDF研修も以前ご紹介しました

あまりにシンプルなのでガッカリされたでしょうか?でも、シンプルなほうが書きやすいです。この書式を見ながら、要件検討会の運営も含め大事なことを列挙していきます(検討会は毎週開かれる前提とします)。

要件検討会で一番大事なことは重要な論点を効率良く、徹底的に議論、検討することです。システム設計プロジェクトの最初の段階、要件定義では検討結果、検討状況の確認ツールとして議事録があります。従って議事録の内容、品質、デリバリータイムが重要です。その分、体裁など他のことは端折ります。検討資料と議事録がしっかりしていれば要件定義書はできたも同然です。

失敗しない要件定義のポイント
  • 要件定義フェーズのプロジェクト設計(仮説、重要論点出し、推進体制作り、検討会スケジュールの事前調整など)
  • 検討会での意思疎通、コミュニケーション
  • 検討資料と議事録作り(ドキュメンテーション

  1. 検討会の論点は2週前からアナウンスしておく。業務部門内での検討に2週かかるのが相場。その上で必要な資料準備や予習をしてきてもらう。1週前の検討会では進み具合を確認する。
  2. 検討会の1週前には議論の材料となる資料を用意し、問題がないか予習してきてもらう(検討会資料、業務フロー、データ定義、画面構成・遷移図など)。
  3. 検討会はスケジュール表で今日の位置付け、論点や、前回の振り返り宿題状況の確認から入る。1週ぶりなので参加者の準備ができないと、いい議論に入れない。
  4. 検討会では議論となる論点が絞られているので、各部門の立場で、大胆に見直す案、現状との親和性を維持する案、その間の妥協案、その案をとった場合の盲点などをじっくり議論できる。ただし積み残し、宿題が出るので2週など期限を設けてもちかえってもらう。重要な論点を要件定義前半にカバーしておく。それでも時間がきつくなることがあるので、毎回検討会スケジュールを見ながら善後策を考えていく(検討会スケジュールには問題がなかったことを納得してもらいながら)。
  5. 検討会では議論の中で別の論点に言及することがあるが、議事録は論点別に再構成し、箇条書き形式とする。言葉を補い要件定義書のインプットになるレベルに仕立てる。確認が必要な言葉にはアンダーラインを引くか、目立つ記号★★を付けるなどして、参加者に議事確認をしてもらう。誰が言ったかよりも、ドキュメントが優先される。曖昧さ、考慮漏れを排除していく(MECEという言葉があったりします)。
  6. 概ね時間順になるが、それにとらわれず構成の分かりやすさを重視する(論点の階層、議論の粒度など)。
  7. 発言者の記載は必要に応じて。質問-回答は一文にまとめて構わない。細かい発言、同じ内容はカットする。本線に関わらないが記録に残したいものは、「その他」として最後にまとめておく。
  8. 決定事項、未決宿題の確認を検討会の最後に行っておく。時間切れの場合、メールでの議事確認を必ず伝えておく。
  9. 議事は必ずレビュワーがチェックする。書き始める前に重要ポイントをおさらい、確認しておくと早く正確に作ることが出来る。
  10. 議事送付は当日か翌日までに行う。
ヘビーですよね。要件検討会2時間やるとヘトヘトなります。1日3コマやるとやせます。でも、要件定義しっかりしていれば、その後がうまくいきますからね。頑張りがいがあります。何事も備えあれば憂いなし、先手先手です。
永島志津夫

全社のシステムを少ない人数で見ていれば時に見落としもあるかもしれません。
オフィスエヌ ショートレビュー5万円から。
連絡先 office.nagasima#gmail.com (#を@に変えてメールをお願い致します

2020年2月11日火曜日

記号処理とニューラルネット 後半 〈Python AI ニューラルネット その7〉

ニューラルネットに記号処理・記号学習を組み合わせたら、というお話の後半です(前半はこちら)。欲張って中間層を50セルにし、第二位と誤答データだけで学習させたネットの結果(記事はこちら)を記号学習させました。結果は98.5%となりました。

中間層50セルで誤答データのみで再学習、epoch 1-17 が1つ目のニューラルネット、それ以降が2つ目のもの


記号学習は記号列生成と重み付け(学習)の2つのステップがあるのですが、今回は単純なので生成は端折りました。

記号列です
正解|第一位|第二位|誤答学習による第一位
ニューラルネットの表現では入力層が 10 + 10 + 10 、 出力層 が 10 、 この組み合わせが 10,000  ( 10 * 10 * 10 * 10 ) あるイメージとなります。

学習アルゴリズム
各記号列の重み付けは 10 * 10 * 10 * 10 = 10,000 のカウンター配列で表現します。学習データの結果に該当する配列要素をカウントアップしていきます。

評価アルゴリズム
テストデータに対し評価を行います。第一位誤答時に、第一位、第二位、誤答学習ネットによる第一位の記号列に相当するカウンター配列から最もカウントの多かった正解* を選びます。numpy.argmaxで一発ですね!

以上です。何と単純なアルゴリズムでしょう。くどいことを言えばAICを参照して冗長なパラメータをまとめてもいいのですが、アルゴリズムの単純さをそのままにしました。

これでもダメなケースはアフィン変換で伸ばしたり、縮めたり、回したり、動かしたりなのですが、計算コストがかかります。なので、簡単なアルゴリズムである記号処理を先に適用して良いかと思います。また記号処理はバイアスをかけられる利点があります。* 最もカウントの多いものを選ぶ代わりに、答えの候補のカウント値や順位を参照します。

MNISTのデータだとコンテキストはないのでバイアスの実験にはなりません。面白そうなサンプルがあったらまたブログにしますね。
永島志津夫

2020年2月7日金曜日

記号処理とニューラルネット 前半 〈Python AI ニューラルネット その6〉

ニューラルネットに記号処理・記号学習を組み合わせたら、というお話です。前回、“多層化が認識の本筋ではない” ことに触れました システムの費用対効果 〈Python AI ニューラルネット - MNIST その5 その続きになります。


まず、テスト結果を見てみましょう。

中間層50セルのテストデータ評価

出力 0 1 2 3 4 5 6 7 8 9 合計
誤答 54 25 59 70 62 39 57 46 61 64 537
正答 962 1,114 967 953 932 808 919 961 912 935 9,463
合計  1,016 1,139 1,026 1,023 994 847 976 1,007 973 999 10,000

出力の3や9の誤答率が高いですね。どのように間違えているか見てみましょう。

同、出力別正解対応表

 出力
正解
0 1 2 3 4 5 6 7 8 9 合計 
0

2 2
4 7 2 1
18
1

2 2
1 5 2 9
21
2 11 1
7 10
9 9 16 2 65
3 1 1 16

14 1 11 10 3 57
4 1 2 4


10 2 3 28 50
5 11 1 3 25 3
14 5 15 7 84
6 11 3 3
10 6
1 5
39
7 3 7 25 7 5



20 67
8 5 3 3 16 6 8 11 6
4 62
9 11 7 1 11 28 6
8 2
74
合計  54 25 59 70 62 39 57 46 61 64 537

これを見ると、誤答パターンがあるのに気付きますね。

出力 = 3では誤答70例中、正解 =  5, 8 で41例と過半数を占めます。“3のような5”、“3のような8” の悪筆が比較的多かったとも言えます。出力 = 3で間違えたら 5 と再回答すれば 25 / 70 ≒ 36% の確率で正解します。

出力層第二位の結果に注目して詳細を見てみましょう。出力層第二位の結果を含めると正解率は向上します。
システムの費用対効果 〈Python AI ニューラルネット - MNIST の続き〉

二位出力別正解対応表(一位出力=3で誤答)
  二位出力
正解
2 4 5 6 7 8 9 合計
0

1

1
2
1

1
1

2
2
1 2
1 3
7
5

25



25
7



3 2 2 7
8 1
1 1
13
16
9

1

3 7 11
合計 1 1 31 1 5 22 9 70

二位出力=正解のケースは誤答総数70例中、48例( 25 + 3 + 13 + 7) です。なので二位出力を再回答すれば 48 / 70 ≒ 69% の確率で正解します。では全てのケースで二位出力を再回答すればよいのかというとそうでもありません。

二位出力別正解対応表(一位出力=9で誤答)
  二位出力
正解
2 4 5 6 7 8 合計
2




2 2
3

1
1 1 3
4
1 2 1 10 14 28
5
1 2
1 3 7
7 1 5 6
3 5 20
8
1

1 2 4
合計 1 8 11 1 16 27 64

最も多い正解は 4 で 28例です。4と再回答すると 28 / 64 ≒ 44% の確率で正解します。ところが二位出力=正解のケースは 8例しかありません。 正解確率は 8 / 64 ≒ 13% とかえって悪くなります。 “9のような4” 、 “9のような7” は単純なニューラルネットには難し過ぎるようです。
そこで二位出力が2,4,5の時は7と答え、6,7,8の時は4と答えると 37例が正解になります。正解確率は 37 / 64 ≒ 58% です。

このような再回答ロジックにより正解率97.4%(誤り率2.6%)に改善できます(元の正解率94.6%(誤り率5.4%))。なお、 第二位再回答では正解率96.9%(誤り率3.1%)です。

実はここまでが前置きになります。今回のお題は記号処理とニューラルネットです。このような再回答ロジックを “人間が” プログラムで組むことは簡単ですが、果たしてニューラルネットで表現したり、学習することはできるのでしょうか?

長くなったので2回に分けます。次回に続く。
永島志津夫