「システム用語」カテゴリーアーカイブ

RSA暗号

今回はRSA暗号です。

RSA暗号の概要

発明
1977年にロナルド・リベスト、アディ・シャミア、レオナルド・エーデルマンによって発明されました。名前は発明者の頭文字から取られています。

背景
RSA暗号は、1976年に公開鍵暗号の概念を提唱したディフィーとヘルマンの研究を受けて、実用的なアルゴリズムとして具体化されました。

原理
RSAはフェルマーの小定理に基づいています。これは、特定の数学的性質を利用して、暗号化と復号化を行う方法です。

特許と公開
RSAは1983年に特許が取得され、RSA Security社が独占していましたが、特許が2000年に満了し、以降は誰でも自由に使用できるようになりました。

使い方

RSA暗号は以下の用途に使われます:

  • 秘匿: データを暗号化して第三者に解読できないようにします。
  • 認証: デジタル署名を用いてデータの信頼性を保証します。

RSAは公開鍵暗号の一つで、暗号化と復号化に異なる鍵を使用することが特徴です。公開鍵で暗号化したデータは、対応する秘密鍵でしか復号できません。

RSA暗号の基本的な仕組み

RSA暗号は、「大きな素数の積を素因数分解することが非常に難しい」という数学的な性質に基づいています。RSAは公開鍵(暗号化に使用)と秘密鍵(復号化に使用)の2つの鍵を使います。公開鍵は誰でも知ることができますが、秘密鍵は鍵の所有者だけが知っているべきものです。

1. 鍵の生成

RSA暗号で使用される公開鍵と秘密鍵は、以下の手順で生成されます。

  • 大きな素数を2つ選ぶ:
    非常に大きな素数 p と q を選びます(通常は数百桁の素数を使います)。
  • これらを掛け合わせる:
    n = p × q として、積 n を計算します。n は公開鍵の一部になります。
  • オイラーのトーシェント関数を計算:
    ϕ(n) = (p − 1) × (q − 1) を計算します。これは、公開鍵を生成するための中間計算に使います。
  • 公開鍵の指数 e を選ぶ:
    1 < e < ϕ(n) かつ e と ϕ(n) が互いに素であるような e を選びます。e は通常、公開鍵として広く使われる数値である65537が選ばれることが多いです。
  • 秘密鍵の指数 d を計算:
    e × d ≡ 1 (mod ϕ(n)) を満たすような d を計算します。この d が秘密鍵になります。

2. 暗号化

メッセージ M を暗号化するには、以下の手順を使います。

  • 公開鍵を取得:
    公開鍵 (n, e) は公開されているので、誰でも取得できます。
  • メッセージを暗号化:
    メッセージ M を次のように暗号化します:
    C = M^e mod n
    ここで、C は暗号文です。

3. 復号化

暗号文 C を復号化して元のメッセージ M を取得するには、以下の手順を使います。

  • 秘密鍵を使用:
    秘密鍵 (d) を使って暗号文 C を次のように復号化します:
    M = C^d mod n
    これにより、元のメッセージ M を得ることができます。

Python

このサンプルはわかりやすくする為にセキュリティ向上させる機能は省いています。

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

def generate_keys(keysize=2048):
    """RSA暗号の鍵ペアを生成する"""
    # 鍵ペアを生成
    key = RSA.generate(keysize)
    public_key = key.publickey()
    return public_key, key

def encrypt(plaintext, public_key):
    """平文を暗号化する"""
    # PKCS#1 OAEPパディングを用いて暗号化
    cipher = PKCS1_OAEP.new(public_key)
    ciphertext = cipher.encrypt(plaintext.encode('utf-8'))
    return ciphertext

def decrypt(ciphertext, private_key):
    """暗号文を復号する"""
    # PKCS#1 OAEPパディングを用いて復号
    cipher = PKCS1_OAEP.new(private_key)
    plaintext = cipher.decrypt(ciphertext)
    return plaintext.decode('utf-8')

if __name__ == "__main__":
    # 鍵の生成
    public_key, private_key = generate_keys()

    # 公開鍵と秘密鍵をPEM形式でエクスポート
    public_key_pem = public_key.export_key().decode('utf-8')
    private_key_pem = private_key.export_key().decode('utf-8')

    # 公開鍵と秘密鍵を表示
    print("公開鍵:")
    print(public_key_pem)
    print("秘密鍵:")
    print(private_key_pem)

    # 平文
    message = "Hello, RSA!"

    # 暗号化
    ciphertext = encrypt(message, public_key)
    print("暗号文:", ciphertext)

    # 復号化
    decrypted_message = decrypt(ciphertext, private_key)
    print("復号文:", decrypted_message)

実行の概要

暗号化:

  • encrypt 関数は公開鍵を使って平文を暗号化し、暗号文をリストとして返します。

復号化:

  • decrypt 関数は秘密鍵を使って暗号文を復号化し、元の平文を返します。

実行結果

公開鍵:
—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL63nW412wf+oz+b1thN
2jQxjPwTSnigTcXMYrunUMUvYLgNNePtFgoD3YyPa356xlHucuIwESVhA8X6GqTq
IiAQUw4dL/IQzoshrTi0H1gfwVtDPeUworgUYLkBnXPOigtzYT2vu6teh3LUgAUx
oCbj2q22snI3NNdF04LRK6z3z/JYEZjAEasJuLlgn6+ZvqVDXO21SjrBQ8B2Qb4O
3P89qT1E+zayVH573p2JALkgZdW4xpEEJ0KYeVXU05mlwfeH+FLQ032CqPiQxaXX
Es9W3asT/RQhgtjyrtq4qHy0iCHQ+PXJl8pjD2B+pVy24w8xG+08qxQyZTxJjOHn
NQIDAQAB
—–END PUBLIC KEY—–

秘密鍵:
—–BEGIN RSA PRIVATE KEY—–
MIIEpQIBAAKCAQEAtL63nW412wf+oz+b1thN2jQxjPwTSnigTcXMYrunUMUvYLgN
NePtFgoD3YyPa356xlHucuIwESVhA8X6GqTqIiAQUw4dL/IQzoshrTi0H1gfwVtD
PeUworgUYLkBnXPOigtzYT2vu6teh3LUgAUxoCbj2q22snI3NNdF04LRK6z3z/JY
EZjAEasJuLlgn6+ZvqVDXO21SjrBQ8B2Qb4O3P89qT1E+zayVH573p2JALkgZdW4
xpEEJ0KYeVXU05mlwfeH+FLQ032CqPiQxaXXEs9W3asT/RQhgtjyrtq4qHy0iCHQ
+PXJl8pjD2B+pVy24w8xG+08qxQyZTxJjOHnNQIDAQABAoIBAAx54KtDhQCoOd2z
YZKwLhmKgkQYz00T6/7KUTwcd2VmIwnSUokegUpE6TTlA65YFen0FFlGPyqj0aFE
zGmD6ixuWaod/opFc38KUAoIsLg8KT77yXWviQ6mVbPCeXfQm1hgh3eWHjf+UYFY
fg4TLbSAErjQxlxlcWWamXWK4VzaDyNOqFtMuJ3wZL27grtJmDpbEfsYfUewd22F
PEKMluXobJ59DYkk/MCQOsazK+SiCOd95eY4GMH0xawrETRpZ0ill96GISrH8b66
EmKXxcTy89bha2jr3/x7yhG3yifuq/PXtyx7r4YIv3HuXbcXjfnOqm5whaTEKroQ
oPwu2YkCgYEAyWki7087YCUxhN7Q5Wf0OzFGReORuEzTmuBpv04sqGpuo8LhotoP
/cFEGqd8Ld9D8bOuDeOJnChBafU9HrUj9q7E6Bd+ktETaPlOtkqec3OQjLx4hJpj
ar4cTLqCs9nyrPVBAgYk8EujEZlnq/uT8VPCbEgD7yJFWoXiRkJvtWkCgYEA5bux
ZJouaNd+RsdcTzOyDzOPRVWRVODlU0sJw66p6771IdWgNIRovOQYtBiA+VqW81TO
ce+w86wDbIOS2rvqdfycbuSMyUhz45OFLThmK+HeIZ0LcJhkdr6jSvicN5V96WHO
D9xCJ/zl1JH7DMijku74xoT/uNdoiuzJKtgHre0CgYEAnoxa6dOPRAJDVvsnqk8I
3UfOr9mSrmgb80FRPT1GvlT6P4N7p3zNNc5b1Def82Rb0frFuz0w6HJv+/8HXBLv
+pJdgu5rvxtCklIe+jUHQo7obUE4Bfqa5D4/fM8dcILTG//8aqF3lomUFpiSGbpz
HXf4BtEx958cxUO7ed92nHECgYEAwwQGvWDIvsUXc9vud2lp4M+i8neFzGixI3jS
jCNsKSxMCPHAcnRoONjkQ5V9fq8w7tTx/vQ64U8HBQnYEwhsKsZKwTQQcxmnDuv+
pHl4+g1dtGkM+gLTXZ3NHmpWqjSj0wbslrgiDLH5I+7cD2kOuj9UPalPL0jkfPIu
fskuE60CgYEAjH35EyLtjamA0nYf87xk6YNLqrzfWK7SgCaubrMbNWw3G5r0j293
GNUAq/hlydJR6yOleOTRUOns3SFxH7ks1MEen+M0Tq60jMWw+HEmRQy9c1AxiwYL
VdcVhkzFoGwqWUXDiSbN6cmiNkgh8IVJL4Xss2Z6HtB+a/ws5qiIrRA=
—–END RSA PRIVATE KEY—–

暗号文:b”\\\nB}k\x0bQ\x95\x01\x8c\xa2\x02z\x1b\xaa\xd21\t\xac\xb9\xf4\xe0WK\xb4’P\tx\xaf\x81\x1f\xbd,F\t\xb2\x8b\xd9y\xff\x18\xc1\x80\x96\xa2\xb0\xcb\xaeAQpv\xcfW\x18\xd9\xbe4:\xe6\xd1y\xf3\xd4\xe0U\x8ft\x10\xcd\xf2’Jl\x97\xb5\xf7\x1dtE\x0c<\xa8\xbeB&G3\x92\x15\xfcD\xe7%\xc9\xaeEn\x01\x87\xc2\xad&Oy]:\xbe.\xb0\xb2\xdf\x1c+q6\x96\xeb\xea\x90\xcf\xd5\xfa\x8b\xa7\xd7\x9af!.\x1c4oX\xbbKU\x9f\xbb\xe9x^\x7f\x9e\x92\x86\xcd5\xf9\xe8\xb9D\x0eB3\xe6\xd8\rZLD\xed\xee\xe0\xc5\x13\xa9J8/\\\xf5\xf0\xb4\xddS\xbb\x12\xf7m(\x8b\xe8\xb0\x18@\x94w`\xb7\xd0\x8f[l\x0e\x8a\x10\x91\xc4\x8d\x1f\x98T\xc0\xc6\x8c\x01\xcd\xbc4\xbe\xd7{\xd2\x9f\xf6,E;\xdc\xe9\x1d\x14\xda3\x1fi\xef\xb9\x85\x93\x08\xf241/\xeeB\x9eY\xb3Qi/\xa4kp#F`f\xdc\xea^\x9c"
復号文: Hello, RSA!

R言語とPython言語

AIでよく出てくる、2言語。

R言語とPython言語

R言語

用途:主に統計解析やデータビジュアライゼーションに強みがあります。
AIへの適用:
統計モデル: 回帰分析や時系列予測などの統計モデルを構築するのに適しています。
データ探索: データの可視化や探索的データ分析(EDA)が簡単です。
機械学習: caret や randomForest などのパッケージがあり、基本的な機械学習には対応していますが、深層学習には限界があります。

Python言語

用途: 汎用プログラミング言語で、データサイエンスから機械学習、深層学習まで幅広く対応しています。
AIへの適用:
機械学習: scikit-learn で様々なアルゴリズムを試せます。
深層学習: TensorFlow や PyTorch などのライブラリがあり、高度な深層学習モデルを構築できます。
データ処理と可視化: pandas でデータ操作、matplotlib や seaborn でデータ可視化が可能です。

比較

機械学習:

R: 統計モデルの構築が得意で、機械学習も基本的には対応しているが、深層学習には限界がある。
Python: 幅広い機械学習および深層学習ライブラリが利用でき、最新の技術にも対応している。

データビジュアライゼーション:

R: 高度なデータビジュアライゼーションが可能で、特に ggplot2 が強力。
Python: matplotlib や plotly でインタラクティブな可視化ができる。

エコシステム:

R: 統計解析とデータサイエンスに特化したツールが豊富。
Python: 幅広い分野に対応するライブラリがあり、AI・ML・データサイエンス全般に強い。

AIプロジェクトにおいては、Pythonがより多機能で、機械学習や深層学習に対応できるため、一般的にはPythonが好まれることが多いです。ただし、統計解析やデータ可視化のためにRを利用することもあります。

RISC Zeroとは?

RISC Zeroは、
zk-STARKs(Zero-Knowledge Scalable Transparent Argument of Knowledge)とRISC-Vマイクロアーキテクチャに基づいたゼロ知識の検証可能な汎用コンピューティングプラットフォームです。

ゼロ知識証明とは、ある当事者・証明したい人(Prover・以下:プロバー)が確かめたい人(Verifier・以下:ベリファイア)に、詳細を一切明かすことなく、何かが真実であることを納得させる手法です。RISC Zeroの場合、プロバーは特定のコードを正しく実行したことをベリファイアに示すことができますが、その際、コードの出力だけをベリファイアに公開し、入力や実行中の状態は一切明かしません
ゼロ知識性があるため、個人情報などのプロバーの特定情報が漏れることはない。

このコードは、zkVMと呼ばれる特別な仮想マシン上で実行されます。
RISC Zero zkVMは小さなRISC-Vコンピュータをエミュレートしており、RISC-V向けのコンパイラツールチェーンが存在する限り、任意のプログラミング言語で書かれたコードを実行できます。現在、Rust、C、およびC++のSDKサポートが存在します。

処理の概要
証明対象となるコードは、実装された言語からメソッドにコンパイルされます。メソッドは、メソッドのコードを実行する特別なエントリーポイントを持つRISC-V ELFファイルとして表現されます。また、メソッドごとにそのイメージID(ELFファイルの特殊な暗号ハッシュ)が計算され、検証に必要となります。
Executable and Linkable Format (ELF) は実行ファイルおよびオブジェクトファイルのためのファイルフォーマットである。コンテナフォーマットの一種。

次に、ホストプログラムが実行され、zkVM内でメソッドを証明します。zkVM内で動作する論理的なRISC-Vマシンをゲストと呼び、zkVMを実行するプロバーホストと呼びます。メソッドの実行中、ゲストホストは通信できますが、ホストはゲストの実行を変更することはできません。そうすると、生成される証明が無効になります。実行中に、ゲストコードは計算の公式な出力を表すジャーナルと呼ばれる特別な追記専用ログに書き込むことができます。

メソッドが正しく終了すると、正しい実行の証明としてレシートが生成されます。このレシートは、実行中に書き込まれたジャーナルと、シールと呼ばれる不透明な暗号データの2つの部分で構成されます。

ベリファイアは、このレシートを検証し、ログを調べることができます。ジャーナルシール改ざんされていた場合、レシートは検証に失敗します。また、ジャーナルの出力が正しい実行のものでない限り、有効なレシートを生成することは暗号的に不可能です。要するに、レシートは正しい実行のゼロ知識証明として機能します。

プロトコルがゼロ知識であるため、ベリファイアは、ジャーナルに書き込まれたデータやコードの正しい実行から推測されること以外には、ホストとゲストの間でやり取りされる詳細な実行やデータについて何も推測することができません。

RISC-Vとは?

RISC-V(リスク・ファイブ)とは、カリフォルニア大学バークレー校で開発されたオープンで拡張可能な命令セットアーキテクチャ(ISA)です。
ISAはプロセッサ間で共通化された、インターフェースとしての論理的な命令セットは命令セットアーキテクチャ(英: instruction set architecture, ISA)と呼ばれる。
RISC-Vは特にシンプルでモジュラー設計が特徴です。

以下に、RISC-Vの主な特徴を挙げます。

オープンでロイヤリティフリー
RISC-VはオープンなISAで、誰でも無料で使用することができ、ライセンス料がかかりません。そのため、商用や非商用を問わず、誰でもこのISAを利用して独自のプロセッサやソリューションを開発できます。

モジュラー設計
RISC-Vは基本命令セット(RV32IやRV64Iなど)と、それに追加可能なオプションの拡張(例えば、浮動小数点演算やベクトル処理など)から成り立っています。このモジュラー設計により、用途や必要に応じて柔軟にプロセッサをカスタマイズできます。

拡張性と柔軟性
RISC-Vの設計は、開発者が独自の拡張機能を追加できるように意図されています。これにより、特定のアプリケーションやニーズに合わせたカスタムプロセッサを容易に設計できます。

広範なコミュニティサポート
RISC-Vは世界中の企業、研究機関、開発者からの支持を受けており、オープンソースコミュニティによって積極的に開発と改善が進められています。

非営利組織による管理
RISC-Vの仕様は、RISC-V Internationalという非営利組織によって管理されており、この組織は特定の製品やサービスに商業的な利害関係を持たず、中立的な立場で活動しています。

RISC-Vは、従来のプロプライエタリなISAに代わるオープンな選択肢として注目されており、特に組み込みシステム、IoTデバイス、学術研究、さらには高性能コンピューティングの分野においても利用が広がっています。

飛んでモンテカルロのAI

世界的に有名なカジノや高級リゾートがある観光地です。モナコ・グランプリが開催される場所!
金持ちのイメージですが、AIでのモンテカルロは違います。
AIが絵描いたモンテカルロのイメージ
モンテカルロのイメージ
モンテカルロで円をAI業界の方が言うと思いますので、説明です。

モンテカルロ法(英: Monte Carlo method、MC)とは

モンテカルロ法とは、シミュレーションや数値計算を乱数を用いて行う手法の総称です。元々は、中性子が物質中を動き回る様子を探るために、スタニスワフ・ウラムが考案し、ジョン・フォン・ノイマンにより命名されました。この手法の名称は、カジノで有名なモナコ公国の4つの地区(カルティ)の1つであるモンテカルロから取られています。モンテカルロ法は「ランダム法」とも呼ばれ、様々な分野で広く利用されています。

モンテカルロ法の主な特徴と応用

  1. ランダム性の利用: モンテカルロ法は、ランダムなサンプル(数値やデータポイント)を生成し、それらを使って問題の解を推定します。このアプローチは、解析的な解が難しい問題に対して非常に有効です。
  2. 高次元問題への適用: モンテカルロ法は、高次元の積分や最適化問題など、解析的に解くのが難しい問題に対しても適用できます。
  3. 金融工学: モンテカルロ法はオプションの価格付け、リスク評価、ポートフォリオの最適化など、金融の分野で広く使われています。将来の資産価格のシナリオを多数生成し、それに基づいて意思決定を行います。
  4. 物理学・統計学: 物理学では、分子の挙動をシミュレーションするために、統計学では確率分布の評価などに使用されます。
  5. ゲーム開発やAI: モンテカルロ木探索(MCTS)は、チェスや囲碁のような複雑なゲームで次の一手を決定するためのアルゴリズムとして使われています。AIが最適な戦略を見つけるために多くのシミュレーションを行います。

モンテカルロ法の基本的な流れ

  1. 問題の定義(例えば、積分や最適化問題)。
  2. ランダムなサンプルを生成。
  3. サンプルに基づいて計算を行い、結果を得る。
  4. 多数のサンプルから結果を統計的に解析し、最終的な近似解を得る。

たとえば、円の面積をモンテカルロ法で求める場合、以下のようにします。

  1. 単位正方形の中に無作為に点を打つ。
  2. 円の内部に入った点の数を数える。
  3. 円の面積は、正方形の面積に対する円内の点の割合から推定されます。

モンテカルロ法は、多くのサンプルを用いることで、より正確な近似が可能となりますが、計算資源を多く消費することもあります。そのため、効率的にサンプルを生成する手法やアルゴリズムが研究されています。

Pythonで表すと

有名なやつを書きます。

モンテカルロ法で円周率を求める方法

この方法では、以下のステップを行います:

  1. 単位正方形(辺の長さが1の正方形)の中にランダムに点を打つ。
  2. 単位円(半径1の円、中心が正方形の中心)に入った点の数を数える。
  3. 円の面積と正方形の面積の比率から、πを推定します。

単位円の面積は πr2 ですが、今回は半径が1なので面積は π です。単位正方形の面積は 1×1=1 です。したがって、円内に入った点の割合を4倍すると π が近似できます。

import random

def monte_carlo_pi(num_samples):
    inside_circle = 0

    for _ in range(num_samples):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        
        if x**2 + y**2 <= 1:
            inside_circle += 1

    return (inside_circle / num_samples) * 4

# サンプル数を設定して実行
num_samples = 1000000
estimated_pi = monte_carlo_pi(num_samples)
print(f"Estimated π value: {estimated_pi}")

コードの解説

  1. ランダムなサンプル生成:
    random.uniform(0, 1) を使って、[0, 1] の範囲でランダムな x, y 座標を生成します。
  2. 円内に入った点のカウント:
    x**2 + y**2 <= 1 という条件を使って、点が単位円の内部にあるかを確認します。
  3. πの推定:
    円内に入った点の数を総サンプル数で割り、4を掛けて π の近似値を求めます。

結果

Estimated π value: 3.140968
サンプル数を増やすことで、より正確なπの値が得られます。上記のコードでは、100万サンプルを使用していますが、計算リソースや精度のトレードオフに応じて調整が可能です。

この基本的なモンテカルロ法の例を元に、より複雑な問題にも適用できるように拡張していくこと

オマケ

モンテカルロ法でどんどんサンプル数を入れたら、どうなのか?グラフにしてみました。
10から10億回処理してみる、こんなグラフになります。どんどん、理想の数値に収束していきます。

ベイズ推定

ベイズ推定(ベイズすいてい、英: Bayesian inference)は統計学における推定手法の一つで、観測データと事前の知識(事前分布)を組み合わせて、未知のパラメータについての確率分布(事後分布)を推定する方法です。この手法は、18世紀のイギリスの牧師で数学者のトーマス・ベイズにちなんで名付けられました。

P(A∣B) は、事象 B が起こったときに 事象 Aが起こる 条件付き確率 です(事後確率)。
P(B∣A)P(B∣A) は、事象 AAが起こったときに 事象 Bが起こる確率です(尤度)。
P(A)P(A) は、事象 A が起こる 事前確率 です。
P(B)P(B) は、事象 B が起こる確率(周辺確率)であり、次のように求められます。

Pythonでかけるの?

Pythonでベイズ推定を実装することは可能です。一般的には、numpy や scipy などのライブラリを用いてベイズ推定を行うことができますが、より簡単にベイズ推定を実行するために専用のライブラリを使うこともあります。代表的なライブラリには PyMC3 や Stan をPythonから使用するための pystan があります。

ベイズ推定をPythonで実装する基本的な例を示します。この例では、シンプルなベイズ推定を行うために scipy を使用し、パラメータの事前分布と尤度関数を定義して、事後分布を計算します。

尤度関数(ゆうどかんすう、英: likelihood function)とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ(もっともらしさ)を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。

基本的なベイズ推定の例

ここでは、コインが表が出る確率 θθ を推定するシンプルな例を示します。仮定として、コイン投げの結果が成功(表)か失敗(裏)であるとします。

Python のプログラム:

import numpy as np
from scipy.stats import beta
import matplotlib.pyplot as plt

# 事前分布: Beta(α, β) 分布
alpha_prior = 1
beta_prior = 1

# コイン投げの結果
heads = 8 # 表が出た回数
tails = 4 # 裏が出た回数

# 事前分布を定義
prior = beta(alpha_prior, beta_prior)

# 尤度関数: Bernoulli分布
# 事後分布: Beta(α + heads, β + tails)
alpha_posterior = alpha_prior + heads
beta_posterior = beta_prior + tails

# 事後分布を定義
posterior = beta(alpha_posterior, beta_posterior)

# 事前分布と事後分布のプロット
x = np.linspace(0, 1, 100)
plt.plot(x, prior.pdf(x), 'r-', label='Prior Beta(1, 1)')
plt.plot(x, posterior.pdf(x), 'b-', label='Posterior Beta(9, 5)')
plt.xlabel('θ (probability of heads)')
plt.ylabel('Density')
plt.title('Prior and Posterior Distributions')
plt.legend()
plt.show()

このコードの説明

事前分布:
Beta分布(beta)を事前分布として設定しています。ここでは、ベータ分布のパラメータ α と β を 1 に設定して、事前分布が均等に分布している状態から始めています。

コイン投げの結果:
表が 8 回、裏が 4 回の結果を設定します。

事後分布の計算:
尤度関数に基づいて、事後分布のパラメータを更新します。ここでは、Beta分布のパラメータを更新することで、事後分布を得ています。

プロット:
事前分布と事後分布をプロットし、どのように事前の信念がデータによって更新されたかを可視化しています。

ベイズ推定の応用例

金融:
リスク評価、ポートフォリオ最適化
医療:
生存時間分析、臨床試験

次世代スマートメーター とは?

電力各社が供給している電気のメーターに対して、使用量をリアルタイムで収集してきている中で、その仕様が電力会社がバラバラなので、統一化します。

統一化されたデータは、エネルギー管理システムの改善に役立ちます。消費者は自宅やビジネスのエネルギー使用量をリアルタイムでモニタリングし、無駄な消費を削減するための措置を講じることができます。これにより、エネルギーコストの削減に繋がるだけでなく、ピーク時の電力需要を減らすことによって、電力網への負担を軽減することもできます。

地域全体でのエネルギー使用の最適化は、再生可能エネルギーの統合を促進し、電力網の安定性を高める助けとなります。統一化されたスマートメーターのデータを活用して、太陽光や風力などの変動するエネルギー源をより効率的に電力網に統合することが可能になります。これにより、化石燃料に依存する必要が減少し、地域の炭素足跡を削減することができます。

最終的に、このような取り組みは、電力供給の信頼性の向上、エネルギーコストの削減、環境への影響の軽減という、地域社会にとっての複数の利益に繋がります。次世代スマートメーターと統一化されたデータ分析ツールの導入により、地域全体のエネルギー効率と持続可能性が向上します。

高度な通信能力
次世代スマートメーターは複数の通信プロトコルをサポートし、電力使用データを電力会社や消費者にリアルタイムで送信できます。これにより、電力使用状況をより正確に、迅速に把握することが可能になります。

エネルギー管理と最適化
これらのメーターは消費者のエネルギー使用パターンを分析し、省エネルギーのヒントや効率的なエネルギー使用戦略を提供します。これにより、エネルギーの使用効率が向上し、コスト削減が実現されます。

リモート制御と診断
電力会社は遠隔からメーターを制御し、診断を行うことができます。これにより、物理的なメーターチェックの必要性が減少し、効率的なメンテナンスが可能になります。

拡張性
スマートメーターに人感センサーや温度センサーなどの環境センサーを搭載することにより、より高度なエネルギー管理と最適化が実現されます。これらのセンサーは、家庭やオフィスの室内環境をリアルタイムで監視し、エネルギー使用量に直接影響を与える要因を把握するのに役立ちます。

統合性
次世代スマートメーターは、スマートホームシステムや再生可能エネルギー源など、他の家庭内やオフィス、工場等のシステムと統合できます。これにより、家庭内のエネルギー管理が一元化され、より効果的な制御と最適化が実現されます。

検討されている技術資料
TR-1052 – EMS・アグリゲーションコントローラー-スマートメーター(Bルート)通信インタフェース実装詳細ガイドライン
スマートメーターとエネルギー管理システム(EMS)の開発に関しては、その実装ガイドラインと技術資料が非常に重要です。これらの資料は、電力各社、開発者、およびシステムインテグレータに対して、次世代スマートメーターシステムの設計、開発、および実装のための共通の枠組みと基準
https://www.ttc.or.jp/document_db/information/view_express_entity/1055

DX白書2021|ディスラプターの脅威

IPAの発表した「DX白書2021」

2021年10月11日公開 独立行政法人情報処理推進機構 社会基盤センターより
https://www.ipa.go.jp/ikc/publish/dx_hakusho.html

DXの定義が曖昧ですが、IPAとしては
IPAとしては、「IoTから得られたデータを活用し、次に企業として進む方向を検討することができる仕組みを作って、その仕組みで常に変化し続ける(変革する)ことがDXです。」
(引用:「DXってIoTとどこが違うの?」https://www.ipa.go.jp/ikc/reports/mfg-dx-faq0104.html)
とのこと。

DX白書2021の内容で衝撃的なのは、IT、AIなどの日米を各項目で比較しているのですが、
凄いのはアメリカは30%以上が開発技術で「コンテナ/コンテナ運用自動化」を活用している。
日本は9%です。
AI導入はアメリカ44%、日本20%。
日本はDXが遅れていることをレポートでは強調している。

比較表で気になったのはこちらです。
「外部環境変化への機会としての認識」

(引用:DX白書2021)

日米誤差の範囲なのですが、1項目だけ10%以上の影響意識の差があります。
「ディスラプターの出現」の項目です。影響があると考えいるのはアメリカ68%、日本54%。
ディスラプター(disruptor)とは
創造的破壊者で、ここでいう意味は最新デジタル技術を使い旧サービスや市場を破壊的変えるサービスや企業になります。
「Airbnb」「Uber」「Netflix」などがあります。

日本では、卸売仕組みや規制や地域サービス格差がまだある為、意識が薄いと思いますが、
アメリカでは意識される項目になったことがわかります。
「Netflix」でいうと、日本のレンタルビデオは壊滅的影響がありました。

ロール

ロール
(役、役割、役目、役柄、任務)
ロールは一般的には、「管理者」「承認者」「登録者」「ユーザー」などがあります。
WEBのブログですと、「サイト管理者」「編集者」「投稿者(ライター)」「デザイナ」「コメント管理者」
などになります。
IoTでのファクトリ関連ですと、「運営管理者」「生産計画者」「素材管理者」「ライン管理者」「生産管理者」「生産者」などとなります。

役割、権限を設定することにより、機能制限や表示制限を行います。
役割と作業内容を出し、機能や表示の有り無しを表にするのが、システムの要件定義では必要になります。
役割が重複する使用者が発生する場合があるので、しっかり検討してください。