Unsplashの画像
マルコフ連鎖は、特定の確率規則に従って、ある状態から別の状態に遷移する数学システムの一種です。 それらは、1906 年に Andrey Markov によってランダムなプロセスの動作をモデル化する方法として最初に導入され、それ以来、物理学、生物学、経済学、統計学、機械学習、コンピューター サイエンスなど、幅広い分野に適用されてきました。
マルコフ連鎖は、20 世紀初頭にこれらのシステムの理論を開発したとされているロシアの数学者、アンドレイ マルコフにちなんで名付けられました。 マルコフは、ランダムな過程の挙動を理解することに興味を持ち、そのような過程をモデル化する方法としてマルコフ連鎖の理論を開発しました。

図 1. 2 状態マルコフ システムの可視化: 矢印は状態間の遷移を示します。
マルコフ連鎖は、システムの将来の動作が過去の動作の影響を受けない無記憶動作を示すシステムをモデル化するためによく使用されます。
データ サイエンスにおけるマルコフ連鎖の一般的な用途は、テキスト予測です。 これは、Google、LinkedIn、Instagram などの企業がテクノロジー業界で一般的に使用している NLP (自然言語処理) の領域です。 メールを書いているとき、Google は単語やフレーズを予測して提案し、メールをオートコンプリートします。 また、Instagram や LinkedIn でメッセージを受信すると、それらのアプリが潜在的な返信を提案します。 これらは、これから検討するマルコフ連鎖のアプリケーションです。 とはいえ、これらの大企業がこれらの機能のために本番環境で使用するモデルの種類はより複雑です。
データ サイエンスでは、マルコフ連鎖を使用して、時系列データの進化、気体中の粒子の動き、病気の蔓延、金融市場の行動など、さまざまな現象をモデル化することもできます。
時系列の例
マルコフ連鎖を使用して時系列の進化をモデル化する方法の例を次に示します。
株価の時系列があり、マルコフ連鎖を使用して時間の経過に伴う株価の変化をモデル化するとします。 株価が取り得る一連の状態を定義できます (例: “増加している、” “減少、” と “安定しました“)、およびこれらの状態間の遷移の確率を指定します。たとえば、次のように遷移確率を定義できます。
Increasing Decreasing Stable
Increasing 0.6 0.3 0.1
Decreasing 0.4 0.4 0.2
Stable 0.5 0.3 0.2
この行列は、現在の状態が与えられたときに、ある状態から別の状態に遷移する確率を指定します。 たとえば、現在株価が上昇している場合、上昇し続ける可能性は 60%、下落する可能性は 30%、安定し続ける可能性は 10% です。
マルコフ連鎖とその遷移確率を定義したら、それを使用して、状態間の遷移をシミュレートすることにより、株価の将来の進化を予測できます。 各時間ステップで、現在の状態と遷移確率を使用して、考えられる次の各状態に遷移する確率を決定します。
マルコフ連鎖の制限の 1 つは、記憶のない動作を示すシステムにのみ適用できることです。 これは、システムの将来の動作が過去の動作の影響を受けないことを意味します。 システムがメモリを示す場合、マルコフ連鎖はその動作をモデル化するための最適なツールではない可能性があります。
マルコフ連鎖のもう 1 つの制限は、有限数の状態を持つシステムしかモデル化できないことです。 システムが無数の状態を取ることができる場合、マルコフ連鎖はその動作を正確にモデル化できない可能性があります。
マルコフ連鎖は、状態間の遷移確率が時間とともに変化しない定常挙動を示すシステムのみをモデル化できます。 遷移確率が時間の経過とともに変化する場合、システムの動作を正確に把握するには、より複雑なモデルが必要になる場合があります。
Python でマルコフ連鎖を実装する方法の例を次に示します。
株価が上昇、下落、または安定しているかどうかを予測するために株価をモデル化します。
import numpy as np
# Define the states of the Markov chain
states = ["increasing", "decreasing", "stable"]
# Define the transition probabilities
transition_probs = np.array([[0.6, 0.3, 0.1], [0.4, 0.4, 0.2], [0.5, 0.3, 0.2]])
# Set the initial state
current_state = "increasing"
# Set the number of time steps to simulate
num_steps = 10
# Simulate the Markov chain for the specified number of time steps
for i in range(num_steps):
# Get the probability of transitioning to each state
probs = transition_probs[states.index(current_state)]
# Sample a new state from the distribution
new_state = np.random.choice(states, p=probs)
# Update the current state
current_state = new_state
# Print the current state
print(f"Step {i+1}: {current_state}")
このコードは、3 つの状態 (「増加」、「減少」、および「安定」) を持つ単純なマルコフ連鎖を定義し、これらの状態間の遷移確率を指定します。 次に、10 タイム ステップのマルコフ連鎖をシミュレートし、遷移確率に従って各タイム ステップで新しい状態をサンプリングし、それに応じて現在の状態を更新します。 このコードの出力は、以下に示すように、経時的なシステムの進化を表す一連の状態になります。

図 2. 初期状態を次のように設定した 3 状態マルコフ過程の出力 「増えている」.
現在の状態を「減少」とコードを実行すると、次の出力が得られます。

図 3. 初期状態を次のように設定した、3 状態マルコフ過程からの出力 「減っている」.
これは非常に単純化された例であり、実際には、システムの動作を正確にモデル化するために、より多くの状態を使用し、より複雑な遷移確率を考慮する必要があることに注意してください。 ただし、これは Python でマルコフ連鎖を実装する方法の基本的な考え方を示しています。
マルコフ連鎖は幅広い問題に適用でき、さまざまなツールやライブラリを使用して Python で実装できます。でこぼこ‘ そしてその scipy.stats 図書館。
ただし、システムのモデル化に使用する前に、マルコフ連鎖の仮定と、それらが特定の問題に適しているかどうかを慎重に検討することが重要です。 結論として、マルコフ連鎖は、データ サイエンティストや研究者が特定の種類の動作を示すシステムを分析およびモデル化する際に検討するのに役立つツールです。
ベンジャミン O.タヨ 物理学者、データ サイエンス教育者、ライターであり、DataScienceHub の所有者でもあります。 以前は、ベンジャミンはセントラル オクラホマ大学、グランド キャニオン大学、ピッツバーグ州立大学で工学と物理学を教えていました。