タグ

algorithmとtechnologyに関するusadamasaのブックマーク (2)

  • 異常検知システム開発の難しさ

    はじめに 「異常検知したい」と考えている人は多いと思います。もはや囲碁ですら機械が人間を上回る時代となったので、システムの故障を発見したりクレジットカード詐欺を見つけたりという異常検知システムも、データサイエンスを使えば人間以上に優秀なものを作れるのではないか?と考えるのも自然でしょう。 一方で、実際に異常検知システムの開発に乗り出してみたものの、意外と上手く完成まで辿りつけなかったり、せっかく作ったけれども結局誤検知だらけでお蔵入りしたり、というケースもあるのではないかと思います。この記事では実際に異常検知システムをゼロから開発してみた経験からいくつかの点について書いてみたいと思います。 この記事にはアルゴリズム的な、技術的な知見は含まれていません。「もし居酒屋で異常検知をネタに呑むとしたら、このへんで盛り上がるかな」的な記事として書いてみましたので、お時間あるときに気軽に読んでいただけ

    異常検知システム開発の難しさ
  • クリティカルセクション

    並行プログラミング(Concurrent Programming)では、並行して動くプログラム(プロセスやスレッド)が種々の資源(メモリ、ファイル、DB、周辺装置・・・)を共有することが多い。これら共有資源をプログラムが取り合う局面をクリティカルセクション(Critical Section)という。クリティカルセクションは並行プログラミングの最も難しい部分であり、バグが生まれる原因にもなりやすい。以下、具体例で説明しよう。 鈴木さんが山科信用金庫の口座からCDで5万円引き出すとしよう。CDのシステム側では、まず預金残高が5万円以上あるかどうかを調べ、okならば預金残高から5万円引くと共に、1万円札を5枚出すことになる。 上記を擬似的なプログラムで見てみよう。 X(メモリ) ← 預金(DB) IF X > 5万円 THEN X ← X - 50,000 預金(DB) ← X ... 1.~4

    usadamasa
    usadamasa 2011/09/29
    ここで、読者の中には次のような疑問を持つ人がいるかもしれない。コンピュータのスピードを考えると、上記のようにタイミング良く処理が重なるなんてことは、たとえ意図的に試みても現実には起こり得ないのではない
  • 1