SCI-Navihttps://lab.scisoken.com数理とデータでビジネスを最適化する。SCI総研の課題解決メディアSun, 22 Mar 2026 16:00:32 +0000jahourly1https://lab.scisoken.com/wp-content/uploads/2026/02/cropped-c7de40783cb1a1553052fafecdb2a18a-32x32.pngSCI-Navihttps://lab.scisoken.com3232 Pythonを用いた超初歩のマーケティングミックスモデリングhttps://lab.scisoken.com/a-00016/Sat, 07 Feb 2026 07:13:15 +0000https://lab.scisoken.com/?p=121

マーケティングミックスモデリング(Marketing Mix Modeling:以下、MMM)は、企業が複数のマーケティング活動の効果を定量化し、最適なリソース配分を決定するための手法です。これにより、広告やプロモーショ ... ]]>

マーケティングミックスモデリング(Marketing Mix Modeling:以下、MMM)は、企業が複数のマーケティング活動の効果を定量化し、最適なリソース配分を決定するための手法です。これにより、広告やプロモーション、価格設定、流通戦略などの影響を分析し、売上やブランド認知度を向上させるためのデータドリブンな意思決定が可能になります。Pythonは、その豊富なライブラリと柔軟性により、MMMの実装に最適なツールです。本記事では、Pythonを用いてMMMを実行する超初歩的な方法について簡単に説明します。

データ収集と前処理

MMMの最初のステップは、必要なデータを収集し、前処理を行うことです。マーケティングデータには、広告費、プロモーション費、販売データ、競合情報、経済指標などが含まれます。今回は、ChatGPTでデータを生成しました。Salesデータ(Sales_data.csv)には、日付と売上が含まれています。Adデータ(Ad_data.csv)には、日付、Web広告費、TV CM費が含まれています。Pythonのpandasライブラリを使用すると、これらのデータを効率的に読み込み、処理することができます。

Python
import pandas as pd# データの読み込みsales_data = pd.read_csv('Sales_data.csv')ad_data = pd.read_csv('Ad_data.csv')

次に、データの前処理を行います。例えば、日付データを適切な形式に変換し、必要に応じてデータのスムージングやノーマライゼーションを行います。

Python
# データの結合data = pd.merge(sales_data, ad_data, on='Date')# 欠損値の処理data.fillna(0, inplace=True)# 日付データの変換data['Date'] = pd.to_datetime(data['Date'])

モデルの構築とトレーニング

データの前処理が完了したら、次にMMMのコアである回帰モデルを構築します。Pythonのstatsmodelsライブラリを使用すると簡単に回帰分析を実行できます。ここでは、売上を目的変数とし、広告費やプロモーション費を説明変数とする重回帰モデルを構築します。

Python
import statsmodels.api as sm# 説明変数と目的変数の設定X = data[['Web', 'TV']]y = data['Sales']# 定数項の追加X = sm.add_constant(X)# 回帰モデルの構築とフィッティングmodel = sm.OLS(y, X).fit()# モデルのサマリー表示print(model.summary())

構築した重回帰モデルサマリーの結果は、以下の通りです。

モデルのトレーニングが完了すると、各マーケティング活動の売上に対する影響を定量化することができます。回帰係数は、それぞれの変数が売上に与える影響の大きさを示します。

 OLS Regression Results ==============================================================================Dep. Variable: Sales R-squared: 0.001Model: OLS Adj. R-squared: -0.001Method: Least Squares F-statistic: 0.3347Date: Sat, 13 Jul 2024 Prob (F-statistic): 0.716Time: 13:43:05 Log-Likelihood: -4084.7No. Observations: 1000 AIC: 8175.Df Residuals: 997 BIC: 8190.Df Model: 2 Covariance Type: nonrobust ============================================================================== coef std err t P>|t| [0.025 0.975]------------------------------------------------------------------------------const 199.8463 3.265 61.204 0.000 193.439 206.254Web -0.0010 0.002 -0.427 0.670 -0.006 0.004TV 0.0032 0.005 0.708 0.479 -0.006 0.012==============================================================================Omnibus: 7.018 Durbin-Watson: 1.880Prob(Omnibus): 0.030 Jarque-Bera (JB): 6.926Skew: 0.199 Prob(JB): 0.0313Kurtosis: 3.091 Cond. No. 8.05e+03==============================================================================Notes:[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.[2] The condition number is large, 8.05e+03. This might indicate that there arestrong multicollinearity or other numerical problems.

モデルの評価と最適化

構築したモデルの評価を行い、必要に応じて最適化を行います。本記事の例では、モデルの評価にR²値や残差分析を使用します。R²値はモデルの適合度を示し、1に近いほどモデルのあてはまりが高いことを意味します。

Python
# R²値の取得r_squared = model.rsquaredprint(f'R²値: {r_squared}')

残差分析を行うことでモデルの予測精度や異常値の検出が可能です。残差プロットを作成し、モデルの適合度を視覚的に評価します。残差プロットでは、縦軸の0に対して残差がどのようにばらついているかを確認します。残差が縦軸の0に対して均一に分散している場合、大きな問題はありません。残差プロットの中で他とは異なり大きく外れている値が少数ある場合、該当する値は外れ値である可能性があります。モデルの最適化には、変数の選択や非線形モデルの導入が考えられます。例えば、広告費と売上の関係が線形ではない場合、ロジスティック回帰やランダムフォレストなどの非線形モデルを試すことができます。これらの手法については、次回以降の記事で紹介予定です。

Python
import matplotlib.pyplot as plt# 残差プロットの作成residuals = model.residplt.scatter(data['Date'], residuals)plt.axhline(y=0, color='r', linestyle='--')plt.xlabel('Date')plt.ylabel('Residuals')plt.title('Residual Plot')plt.xticks(rotation=60)plt.show()

まとめ

本記事では、Pythonを用いたマーケティングミックスモデリング(MMM)の超初歩の手法を説明しました。データ収集、前処理、モデルの構築とトレーニング、モデルの評価と最適化のプロセスを通じてマーケティング活動の効果を定量化し、最適なリソース配分を決定することができます。Pythonのライブラリを活用することでMMMを効率的に実行し、データドリブンなマーケティング戦略の立案に役立てることができます。実践では、データの質と量、モデルの適用範囲を考慮し、継続的な評価と改善を行うことが重要です。

なお、今回のデータは、ChatGPTを用いて生成したため、実際のデータとは大きくかけ離れています。ご了承ください。

]]>
マーケティングミックスモデリングにおけるアドストックを考慮とは?https://lab.scisoken.com/a-00015/Sat, 07 Feb 2026 07:00:42 +0000https://lab.scisoken.com/?p=118

目次 背景 そもそも、マーケティングミックスモデリングとは? アドストックモデルの概念 Pythonによるアドストックモデルの実装 まとめ 目次へ 背景 マーケティングミックスモデリング(Marketing Mix Mo ... ]]>

背景

マーケティングミックスモデリング(Marketing Mix Modeling:以下、MMM)は、企業がマーケティング活動の効果を定量的に評価するために重要な手法です。MMMは、広告、プロモーション、価格戦略などのマーケティング要素が売上に与える影響を解析し、最適な予算配分を明らかにするために使用されます。例えば、TV CMを思い浮かべてみて下さい。CMが流れた直後にその商品を買う人は少ないでしょう。どちらかと言えば、CMが流れてずっと頭の中にあのメロディーが残っていて、ちょっと疲れてきた月の後半にボーナスが入ってなんとなく買ってしまうという感じではないでしょうか。このように一部の広告には、残存効果(アドストック)があります。本記事では、広告の残存効果を考慮したアドストックモデルに焦点を当てます。

そもそも、マーケティングミックスモデリングとは?

マーケティングミックスモデリングについては、過去の記事をご覧いただくのが良いかと思います。

簡単に概要を示すと、以下の通りです。

MMMは、統計的手法を用いてマーケティング活動が売上や利益に与える影響を分析する手法です。MMMは、多くの場合、回帰分析を基盤とし、各マーケティング要素(例えば、テレビ広告、オンライン広告、プロモーションや価格設定など)の貢献度を特定します。MMMの目的は、マーケティング予算の最適配分を行い、投資対効果(Return on Investment:以下、ROI)を最大化することです。

MMMの重要な要素の一つは、データの収集と前処理です。売上データ、マーケティング支出データ、外部要因(経済指標や季節要因など)を収集し、これらを一つの分析モデルに統合します。データの前処理には、欠損値の補完、異常値の検出、変数の標準化などが含まれます。

次に、前処理されたデータを用いて回帰モデルを構築します。この段階では、各マーケティング要素の係数を推定し、売上への影響度を特定します。モデルの性能は、R2やMSE(Mean Squared Error:平均二乗誤差)などの指標で評価します。また、モデルの妥当性を確認するためにトレーニングデータとテストデータに分割して検証を行います。

MMMの結果をもとにマーケティング戦略の最適化が行います。各要素のROIを計算し、予算配分を見直します。このプロセスを繰り返すことで企業はマーケティング投資の効率を高め、競争優位を確立することができます。

アドストックモデルの概念

アドストックモデルは、広告の残存効果を考慮したマーケティングミックスモデリングの中の一つの手法です。通常のMMMでは、広告の効果が即座に現れると仮定しますが、実際には広告効果は時間とともに減少しながらも持続します。この持続効果を残存効果と呼び、これをモデルに組み込むことで、より現実的な解析が可能となります。

アドストックモデルでは、広告効果の減衰を指数関数的に表現するなどの方法があります。例えば、ある広告キャンペーンが行われた場合、その効果は初期値から徐々に減少しますが一定期間は持続します。これを数式で表すと、以下のようになります。

$$ \text{ある時刻tにおけるアドストック効果} = \text{ある時刻tにおける広告費} + \theta \times \text{ある時刻の前の時刻t-1におけるアドストック効果} $$

ここで、Θは減衰率を表し、0から1の間の値を取ります。

Pythonを用いてアドストックモデルを実装するには、まず広告データの準備が必要です。広告支出データを時系列データとして取り込み、減衰率を設定します。次に、アドストック効果を計算し、元のデータに追加します。この新たな変数を含めた回帰モデルを構築し、分析を行います。

アドストックモデルの利点は、広告効果の持続性を考慮することで、より精度の高い予測が可能になる点です。また、広告の減衰率を調整することで異なる広告キャンペーンの効果を比較することができます。これにより、企業は広告戦略の最適化を図り、効果的なマーケティング投資を実現できます。

Pythonによるアドストックモデルの実装

Pythonを用いたアドストックモデルの実装は、主に以下のステップで行います。まず、必要なライブラリをインポートします。次に、広告支出データを読み込み、時系列データとして処理し、アドストック効果を計算し、回帰モデルに組み込みます。

具体的な実装手順は以下の通りです:

import pandas as pdimport numpy as npfrom sklearn.linear_model import LinearRegression# データの読み込みdata = pd.read_csv('advertising_data.csv')# アドストック効果の計算def calculate_adstock(ad_spend, theta): adstock = np.zeros(len(ad_spend)) adstock[0] = ad_spend[0] for t in range(1, len(ad_spend)): adstock[t] = ad_spend[t] + theta * adstock[t-1] return adstock# アドストック効果をデータに追加theta = 0.5 # 減衰率の設定data['Adstock'] = calculate_adstock(data['Advertising'], theta)# 回帰モデルの構築X = data[['Adstock', 'Other_Marketing_Factors']]y = data['Sales']model = LinearRegression()model.fit(X, y)# 結果の表示print(f'Coefficients: {model.coef_}')print(f'Intercept: {model.intercept_}')print(f'R-squared: {model.score(X, y)}')

上記のコードは、広告支出データを読み込み、アドストック効果を計算して新たな変数を作成し、回帰モデルに組み込む手順を示しています。減衰率の値は、広告の特性や市場環境に応じて調整が必要です。結果として、各マーケティング要素の係数を取得し、売上への影響度を評価できます。

この手法により、広告の持続効果を考慮した精度の高いマーケティングミックスモデリングが可能となり、企業はマーケティング戦略の最適化に役立てることができます。

まとめ

本記事では、Pythonを用いたマーケティングミックスモデリング(MMM)とアドストックモデルについて解説しました。MMMは、企業のマーケティング活動の効果を定量的に評価し、最適なマーケティング戦略を立案するための重要な手法です。特に、アドストックモデルは、広告の遅延効果を考慮することで、より現実的な解析を可能にします。

アドストックモデルを活用することで企業は広告の持続効果を正確に評価し、マーケティング戦略の最適化を図ることができます。今後も、データ分析技術を駆使してマーケティング効果の精度を高め、ROIを最大化する取り組みが求められます。

]]>
マーケティングミックスモデリング(MMM)とは?https://lab.scisoken.com/a-00014/Sat, 07 Feb 2026 06:50:57 +0000https://lab.scisoken.com/?p=114

目次 背景 MMMの基本概念 MMMの適用方法 データの準備 モデルの構築 モデルの評価と調整 結果の解釈とアクション MMMの課題点 MMMの成功事例 事例1:消費財メーカー 事例2:小売業 事例3:自動車メーカー ま ... ]]>

背景

マーケティングミックスモデリング(Marketing Mix Modeling:以下、MMM)は、企業がマーケティング活動の効果を評価し、最適化するための統計的な手法です。一部では、Media Mix ModelingでMMMとなっている場合もあります(Chen et al., 2018)。MMMは、広告、プロモーション、価格設定、流通チャネルなどの様々なマーケティングに関係する要素を分析し、それらが売上や市場シェアにどのような影響を与えるかを明らかにします。企業は、MMMを活用することで限られた予算を最も効果的に配分でき、投資対効果(Return On Investment:以下、ROI)や広告費用対効果(Return On Ad Spend:以下、ROAS)を最大化することができます。本記事では、MMMの基本概念、具体的な適用方法、成功事例について詳しく解説します。

MMMの基本概念

MMMは、複数のマーケティング活動が売上や他のビジネス成果にどのような影響を与えるかを定量的に評価するための手法です。この手法は、1960年代に提案されたとされている分析アプローチであり(Borden, 1964)、観測データ(商品価格、広告費用、売上、経済的要因など)を使用して、様々な戦略が売上に与える影響を推定および予測します。これまで産業界では、調査会社や広告会社が独自に構築・提供しており、詳細な技術仕様は各社の独自のノウハウとなっていました(安永ら, 2022)。しかし、近年では様々な論文やオープンソースの実装がなされ、一般的な技術になってきています。MMMでは主に回帰分析などの統計学的な手法を用いて各マーケティング要素の効果を分離し、各要素の寄与度を明らかにします。

単純な回帰モデルでは、目的変数は重要業績評価指標(Key Performance Indicator:以下、KPI)であり、説明変数には様々なメディアに関する観測情報(例えば、各広告媒体ごとの支出、インプレッション数、一定期間に放送されたテレビCMの視聴率の合計(Gross Rating Point:以下、GRP)、製品価格、経済的要因、競合他社のマーケティング活動)などがあります。通常、モデルは日次、週次、月次で市場エリアごとに構築されます。なお、多くの会社ではKPIが売上としています(Chen et al., 2018)。

MMMの基本的なプロセスを簡単にまとめると以下の通りです:

  1. データ収集:売上データ、マーケティング支出データ、競合情報、経済指標など分析に必要な様々なデータを収集します。
  2. モデル構築:収集したデータを基に統計モデルを構築します。回帰分析などにより、各マーケティング要素の影響を定量化します。
  3. モデル評価:構築したモデルの精度を評価し、必要に応じてチューニングを行います。モデルの精度は、実際のデータと予測データの比較により評価されます。
  4. 結果の解釈:モデルから得られた結果を解釈し、マーケティング活動の最適化に活用します。具体的には、最も効果的なマーケティングチャネルや施策を特定し、それらに予算を配分します。

MMMの大きな利点は、過去のデータに基づいてマーケティング活動の効果を客観的に評価できる点にあります。これにより、企業は感覚や直感ではなく、データに基づいた意思決定を行うことができます。

MMMの適用方法

MMMでは、具体的な手順とポイントを押さえることが重要です。以下に、MMMの実践的な適用手順を示します。

データの準備

MMMの第一歩は、必要なデータの収集と準備です。売上データ、マーケティング支出データ、競合情報、経済指標など分析に必要なすべてのデータを集めます。これはデータを扱ったモデリング全てに共通することですが、データの品質が分析結果に大きく影響するため、データの正確性と一貫性を確保することが重要です。

モデルの構築

次に、収集したデータを基に統計モデルを構築します。通常、回帰分析を使用して各マーケティング要素の影響を定量化します。この際、変数の選択とモデルの設定がとても重要です。適切な変数を選択し、過剰適合を避けるために慎重にモデルを設定する必要があります。

モデルの評価と調整

構築したモデルの精度を評価し、必要に応じてチューニングを行います。モデルの精度は、実際のデータと予測データの比較により確認されます。評価指標としては、R2やMSE(Mean Squared Error:平均二乗誤差)などが使用されます。モデルの精度が不十分な場合には変数の追加やモデルの再設定を行います。

結果の解釈とアクション

モデルから得られた結果を解釈し、マーケティング活動の最適化に活用します。具体的には、最も効果的なマーケティングチャネルや施策を特定し、それらに予算を配分します。また、異なるシナリオをシミュレーションすることで将来のマーケティング戦略を策定することができます。

MMMの適用には専門的な知識とスキルが必要ですが、正しく適用することで企業はマーケティング活動の効果を最大化し、競争力を高めることができます。

MMMの課題点

広告主にとってMMMの統計モデルの価値は、一連のメディア(TV CM、ラジオ、Web広告など)の効果の因果推論にありますが、因果推論は観察データでは困難であることが知られています(Chen et al., 2018)。

特に、MMMで有効な因果推論を行う上での大きな課題の 1 つは、ターゲティング広告における選択バイアスです。ターゲティング広告は、様々なメディアで一般的ですが、デジタルマーケティングでは特に難しい問題の一つです。ターゲティング広告における選択バイアスは、ターゲット層の根底にある関心や需要が広告費と売上の両方を左右する場合に生じます(Chen et al., 2018)。

これは、実例に例えて考えると分かりやすいと思うのですが、広告主は自社製品に対する想いが強いほど、より多くの広告費を費やすことがよくあります。その結果、広告費の変化に対する売上の変化を推定する単純な回帰分析では、ROAS が過大評価されてしまいます(Chen et al., 2018)。

MMMの成功事例

MMMは多くの Fortune 500 企業で採用されていますが、データ収集、選択的バイアス、広告の長期的影響、季節性、ファネル効果など様々な制限があることが分かっています(Chen et al., 2018)。一方で、MMMは多くの企業で成功事例を生み出しています。以下に、いくつかの代表的な成功事例をあえて具体的な企業名は載せずに紹介します。

事例1:消費財メーカー

ある大手消費財メーカーは、MMMを活用して広告キャンペーンの効果を評価しています。その結果、TV CMが最も効果的であることが判明し、広告予算をテレビに集中させることで売上を大幅に増加させることに成功しています。また、特定のプロモーション施策が売上に与える影響も明らかになり、無駄な支出を削減することができています。

事例2:小売業

ある大手小売メーカーは、MMMを使用して各種マーケティング施策のROIを分析しています。その結果、Web広告とメールマーケティングが高いROIを持つことが判明し、これらの施策に重点を置くことで売上と利益の両方を向上させることに成功しています。また、季節ごとのマーケティング活動の効果を分析することで季節ごとに最適な施策を実施することが可能になっています。

事例3:自動車メーカー

自動車メーカーは、MMMを利用して新車販売キャンペーンの効果を分析しています。その結果、ディスプレイ広告とディーラーイベントが新車販売に大きな影響を与えることが判明し、これらの施策に重点を置くことで販売台数を増加させることに成功しています。また、価格プロモーションの効果も評価し、適切な価格設定を行うことで利益率を維持しつつ販売を促進することができています。

これらの事例から分かるようにMMMは制限はあるものの、企業がマーケティング活動の効果を最大化するための強力なツールです。正確なデータと適切な分析により、企業は競争力を高めるための効果的なマーケティング戦略を策定することができます。

まとめ

マーケティングミックスモデリング(MMM)は、企業がマーケティング活動の効果を評価し、最適化するための強力な手法です。本記事では、MMMの基本概念、適用方法、課題点、成功事例について簡単に解説しました。成功事例からも分かるようにMMMは企業のマーケティング戦略を効果的に支援し、競争力を高めるための有力な手段となります。MMMを活用することで企業はデータに基づいた意思決定を行い、限られた予算を最も効果的に活用することが可能となります。したがって、現代の競争の激しい市場環境においてMMMは企業の成功に欠かせないツールと言えると思います。今回の記事が何かしらの参考になれば幸いです。

参考文献やサイトなど

  1. Chen, A., Chan, D., Perry, M., Jin Y., Sun, Y., Wang, Y., Koehler, J. 2018. arXiv. https://doi.org/10.48550/arXiv.1807.03292
  2. Borden, N. H. 1964. The concept of the marketing mix. Journal of advertising research. 4(2). pp.2-7.
  3. 安永遼真, 熊谷雄介, 道本龍. 2022. マーケティング・サイエンスにおける個票データの課題とMarketing Mix Modelingの「再発見」. 人工知能学会全国大会論文集. pp. 2P4GS1002. https://doi.org/10.11517/pjsai.JSAI2022.0_2P4GS1002
]]>
決算情報をまとめられるExcelファイルを作ってみましたhttps://lab.scisoken.com/a-00013/Sat, 07 Feb 2026 06:37:21 +0000https://lab.scisoken.com/?p=111

目次 背景 決算データの整理方法 まとめ 目次へ 背景 決算情報を扱う際には、多くの情報を正確に管理・分析することが求められます。特に、財務情報の詳細な把握は企業の健全性や将来の見通しを評価する上で非常に重要です。本記事 ... ]]>

背景

決算情報を扱う際には、多くの情報を正確に管理・分析することが求められます。特に、財務情報の詳細な把握は企業の健全性や将来の見通しを評価する上で非常に重要です。本記事では、筆者が作成したExcelファイルを用いて決算情報を効率的にまとめる方法について解説します。具体的には、連結決算と四半期決算のデータをどのように整理し、分析に活かすかについて説明します。

決算データの整理方法

連結決算データの整理は、企業全体の財務状況を把握するための重要なステップです。筆者が作成したExcelファイルには、決算期日、決算期、売上高、営業利益、経常利益、当期純利益、修正1株益(EPS)などの基本的な財務指標が含まれています。これらのデータを利用して企業の財務パフォーマンスを総合的に評価することが可能です。

まず、各決算期ごとにデータを入力します。この作業が一番大変なのですが、財務情報を入力することで頭にインプットされる点もありますし、他の有料サービスを使用することを考えると、時間単価としては筆者が作成したExcelファイルにデータを入力する方が安く済む場合が多いと思います。

このExcelファイルにデータを完全に入力できると、例えば、四半期ごとの売上高や利益の変動をグラフ化することで季節的な要因や特定のイベントが業績に与える影響を視覚的に捉えることができます。また、総資産、自己資本や自己資本比率のデータを用いて企業の財務健全性を評価することもできます。これにより、企業の持続可能な成長性を判断する手助けとなります。

さらに修正1株配(BPS)や発行済み株式数などのデータも活用して株主にとっての価値創造の観点から企業を評価することができます。これらの指標は、企業の株式市場でのパフォーマンスと直接関連するため、投資家にとって重要な情報となります。

また、ROA(総資産利益率)やROE(自己資本利益率)などの指標も自動計算できるようになっています。これらを計算することで企業の資産や資本をどれだけ効率的に活用しているかを分析できます。これにより、企業の経営効率の向上や改善のポイントを見つけることができます。

まとめ

決算データを整理するためのExcelファイルについて解説しました。これらのデータを適切に整理し、分析することで企業の財務パフォーマンスを総合的に評価することが可能です。また、各種財務指標を活用して企業の強みや弱みを詳細に評価することが重要です。これにより、企業の持続可能な成長性や経営効率の向上に向けた具体的な施策を見出すことができると考えられます。

※Excelファイルの公開を終了しました。

]]>
販売戦略立案のためのアソシエーション分析と購入商品のつながり可視化手法https://lab.scisoken.com/a-00012/Sat, 07 Feb 2026 06:29:30 +0000https://lab.scisoken.com/?p=107

目次 背景・目的 使用するデータセット コード(プログラム) データの前処理 アソシエーション分析 まとめ 参考文献やサイトなど 目次へ 背景・目的 近年、Customer Data Platform (CDP)が整備さ ... ]]>

背景・目的

近年、Customer Data Platform (CDP)が整備され、お客様の購買データを収集しやすくなっています。一方で、お客様の購買データを活かすには、多少の手間をかけた分析が必要になります。例えば、お客様の購買データから抱き合わせ販売や商品の品揃えの戦略を立てる際に非常に有用なのが、アソシエーション分析です。アソシエーション分析とは、膨大なデータの中から特定の事柄が起きた場合、その事柄に関連して別の事柄が起きやすいというパターンを見つけ出す手法です。特にマーケティング分野では、購買履歴から関連性を見つけて販売戦略に役立てる際に利用されます。

本記事では、既存のオープンソースデータセットを用いてアソシエーション分析について解説します。他のサイトでは、分析手法やコードのみが公開されているのに対して、本記事では理論的な部分や学術的な内容についても触れながら解説していきます。

使用するデータセット

まず、使用するデータセットについてです。使用するデータセットは、UC Irvine Machine Learning Repositoryに公開されているOnline Retailというデータセットです(Chen, 2015)。データは、xlsx形式(Excel形式)でダウンロードできます。データセットの作者は、Daqing ChenでSchool of Engineering, London South Bank University所属のようです。ライセンスはCreative Commons Attribution 4.0 International (CC BY 4.0) licenseとなっています。そのため、従うべき条件を満たせば商用利用も含めて再配布や改変が可能です。データセットへのリンクは下記になります。

データセットへのリンク

このデータセットは、RFM分析を用いた顧客のセグメンテーションに関するケーススタディの論文で使用されています(Chen et al., 2012)。データセットの作者とこの論文の筆者が同じ方なので、この研究のために作られたデータセットであると考えられます。なお、RFM分析とは顧客分析手法の1つでRecency(最終購入日)、購入回数(Frequency)、購入金額(Monetary)の3つの軸で顧客をランク分けする手法です。RFM分析については、別記事で解説予定です。

コード(プログラム)

下記は、データの前処理とアソシエーション分析を含めたコードです。

データの前処理

アソシエーション分析をする前にまずはデータの前処理をしていきます。データを読み込むとカラムは、InvoiceNo、StockCode、Description、Quantity、InvoiceDate、UnitPrice、CustomerID、Countryとなっています。日本語で解説している他の方の記事(makaishi2(赤石 雅典), 2020)もありますのでカラムが英語名だとちょっと...という方は、そちらをご覧ください。

データセットの説明では、CustomerIDの欠損値(Missing Values)はないとなっていますが、データ数が他の項目に比べて少ないため、欠損値除去の処理をしました。その後、UnitPrice(単価)とQuantity(数量)から合計金額を算出しています。そして、InvoiceDate(決済日)を横軸に売上金額を描画してみました。

Fig.1 キャンセル注文も含んだ売上金額

Fig.1は、キャンセル注文も含んだ結果となっています。これでは、正確な分析ができません。他の方の記事では、キャンセル注文を除かず、注文履歴を整形し、分析対象のデータを用意した例もあります(Mika A, 2022.)。しかし、分析対象のデータ内にキャンセルした商品のデータが含まれているため、これも正確な分析はできていないことになります。そこで、今回は実際に購入された商品のみを抽出することで正確な分析をしていきたいと思います。

実際に購入された商品を対象に、InvoiceDate(決済日)を横軸に売上金額を描画してみます。2011年5月と2011年7月の間に1本突出した部分がありますが、Fig. 1のようにマイナスの部分やはなくなりました。一方で、突出した部分があるのが気になります。

Fig.2 DiscountとManualを除いたキャンセルフィルタでフィルタリングしたデータの売上金額

そこで、突出している部分のデータを見てみました。突出している部分のデータは、商品のキャンセルをManual操作でやっていたもののようです。そこで、Discount(D)とManual(M)も用いてフィルタを設計しました。このフィルタにより突出した部分がなくなったので、このフィルタを適用したデータを整形してアソシエーション分析をやっていきます。厳密には、適切なフィルターでない可能性が高いですが、今回はキャンセル注文を除いた実際に購入された商品(このデータの期間内)として処理していきます。なお、実際に購入された商品のみを抽出したファイルは下記になります。

Online Retailデータセットから実際に購入された商品を抽出したデータ

Fig.3 アソシエーション分析に使用するデータの売上金額

データは、発注番号に対してどの商品が買われたのか?が分かる形式に整形して使用します。

アソシエーション分析

では、ようやくアソシエーション分析に入っていきます。繰り返しになりますが、アソシエーション分析は膨大なデータの中から特定の事柄が起きた場合、その事柄に関連して別の事柄が起きやすいというパターンを見つけ出す手法です。アソシエーションルール(規則性)は、{A⇒B}の形式で表現され、Aを条件部、Bを結論部と呼称します。通常は、ルールの重要性を表す評価指標に基づいて、閾値などの形で指標の条件をユーザが指定することによって条件を満たすルールを抽出します。その際に、用いられる指標がsupportconfidenceliftです。supportは、全ユーザの中で商品Aと商品Bを同時に購入したユーザの割合、confidenceは商品Aを購入したユーザが商品Bを購入する割合、liftは商品Aと一緒に商品Bも購入した人の割合confidence{A⇒B}が全データの中で商品Bを購入した人の割合よりどれだけ多いかを示す倍率値です。

$$ support = \frac{N(A \cap B)}{N_r} $$ 

$$ confidence = \frac{N(A \cap B)}{N(A)} $$ 

$$ lift = \frac{confidence}{P(B)} $$ 

今回の分析ではsupportの下限値を0.02に設定しています。他の記事では、supportの下限値を0.06に設定していました。恐らく、他の記事で扱っているデータはキャンセル注文を削除していないので下限値を大きく設定できているのだと考えられます。一方で、研究ではsupportの下限値を0.03に設定していました(伊藤ら, 2010)。supportの下限値を低く設定しないといけないということは、全ユーザの中で商品Aと商品Bを同時に購入したユーザの割合が少ないことを示します。つまり、販売戦略立案という点では、商品の同時購入促進などの施策が必要な可能性を示唆しています。なお今回、supportの下限値を0.02と設定したのは、ネットワークの可視化までできたのが0.01刻みで0.02だったためです。

supportが低くても、confidenceが高い場合は、商品Aを買うと商品Bも購入されることを表します。しかし、商品Bを買う人が多い場合は、confidencesupportも値が大きくなり、多くの人が商品Aも商品Bも購入することを表し、一見、販路拡大の施策立案などは必要ないように思われます。一方で、商品Bを買う人が少ない場合はconfidenceが低下するため、商品Aとの併売といったプロモーション施策の立案が必要である可能性があります。このようにconfidenceは、商品間の関連性を調べるうえで重要な指標ですが、商品単体の特性を考慮できないために扱いには注意が必要です。このような問題点を解決する指標としてliftがあります。

liftが低ければ商品Bが単独で売れており、confidenceが高い場合でも商品Aとの関連性は低いと判断されます。一般的には、liftが1以上の場合に有効なルールとされるようです。

このようにアソシエーションルールは4つの指標を確認しながら、有益なルールであるかを判断します。しかし、ルールのもとになる事象(商品)の組み合わせは膨大になり、全ての組合せに対して評価していると相当の時間がかかってしまいます。そこで、膨大な組み合わせの中から意味のある組合せかどうかを判断するためのAprioriアルゴリズムが提案されています。このアルゴリズムは、supportが一定値以下のアイテムを含む組み合わせは、confidenceを計算しないというものです。

ここまでに解説した流れでいくつかのアソシエーションルールを採用することになります。

最後に、得られたアソシエーション分析の結果を元に商品間のつながりを可視化するとFig. 4のようになります。Fig. 4からは、同じ商品の色違いが同時に購入されやすい傾向があることが分かります。

Fig.4 アソシエーション分析結果の可視化(購入された商品のつながり)

まとめ

本記事では、既存のオープンソースデータセット(UC Irvine Machine Learning Repositoryに公開されているOnline Retail)を用いてアソシエーション分析について解説しました。特に、本記事では理論的な部分や学術的な内容についても触れながら解説しました。使用したデータセットではキャンセル注文を考慮するかによって分析結果が大きく変わることが分かりました。また、前処理の重要性も合わせて再認識できる良いタスクだったと思います。長文となりましたが、最後まで読んでいただきありがとうございました。

参考文献やサイトなど

  1. Chen, D. 2015. Online Retail (UC Irvine Machine Learning Repository). https://doi.org/10.24432/C5BW33
  2. Chen, D., Sain, S.L., Guo, K. 2012. Data mining for the online retail industry: A case study of RFM model-based customer segmentation using data mining. Journal of Database Marketing & Customer Strategy Management. 19. https://doi.org/10.1057/DBM.2012.17
  3. makaishi2(赤石 雅典). 2020. Pythonでアソシエーション分析. https://qiita.com/makaishi2/items/c5f06f844cdb8454b6c3, accessed on 3 Apr. 2024.
  4. Mika A. 2022. アソシエーション分析をやってみた. https://note.com/mk_a993/n/n159b63352e2d, accessed on 3 Apr. 2024.
  5. 伊藤晃, 吉川大弘, 古橋武, 池田龍二, 加藤孝浩. 2010. アソシエーション分析における可視化を用いた興味深いルールの探索. 日本知能情報ファジィ学会ファジィ システムシンポジウム講演論文集. 26. TD2-1. https://doi.org/10.14864/fss.26.0.157.0
  6. ゼッタテクノロジー株式会社. 第7回アソシエーション分析1 アソシエーション分析とは. https://www.zetta.co.jp/bigdata/l_07.shtml, accessed on 3 Apr. 2024.
]]>
mplfinanceを用いた株価情報の可視化~チャートの描画カスタマイズ~https://lab.scisoken.com/a-00011/Sat, 07 Feb 2026 06:15:31 +0000https://lab.scisoken.com/?p=103

目次 背景・目的 mplfinanceを用いた株価情報の可視化 まとめ 参考文献やサイトなど 目次へ 背景・目的 本サイトでは、これまでに株価情報の取得方法としてpandas-datareaderを用いた株価情報の取得方 ... ]]>

背景・目的

本サイトでは、これまでに株価情報の取得方法としてpandas-datareaderを用いた株価情報の取得方法を解説しています。しかし、pandas-datareaderなどで株価情報の取得ができても可視化ができないと、どのようなデータなのかイメージするのは難しいものです。

そこで、本記事では株価情報の可視化に使えるmplfinanceについて具体例を交えながら使い方を解説したいと思います。他の記事では、移動平均線の入れ方などについて解説していることが多いですが、今回は移動平均線の入れ方などに加えて出力する図のフォーマットを変える方法についても詳しく解説していきます。

mplfinanceを用いた株価情報の可視化

まず、mplfinanceでの可視化を行う前にNasdaq Data Link、J-Quants APIやpandas-datareaderなどを用いた株価情報の取得が必要です。本記事では、pandas-datareaderで日経225の情報を取得して使用します。本サイトでは、S&P500指数の解説記事にてmplfinanceを用いた株価情報の表示方法を解説していますが、本記事ではより詳細な部分について解説していきます。

mplfinanceには、Panels ModeとExternal Axes Modeの2種類の表示方式があります(筆者が調べたなかでは、ModeとMethod両方の表記がありました)。Panel Modeは、イメージとして軸(Axes)は1つのみでパネルと呼ばれる枠の領域を分割して複数のグラフを表示する方法です。一方で、External Axes Modeはイメージとして軸(Axes)は複数あり、複数のグラフを表示する方法です。これらの表示方法は互いに似ている部分もありますが、一部の機能が使えないなど完全に同じものではありません。使えない機能については下のExternal Axes Modeで使えない機能一覧から見られます。

External Axes Modeで使えない機能一覧

今回は、より自由にグラフが描けるExternal Axes Modeを用いた例を紹介します。External Axes Modeでは、matplotlibで2軸のグラフを描くときのような形で図の構造を作っていきます。下記の例では、上に株価、下に出来高を示しており、スタイルは自身で定義しています。

一方で、mplfinanceでは用意されているスタイルを用いることも可能です。用意されているスタイルの一覧は、以下のコードで取得可能です。outputsは、スタイルの出力結果になります。

Python
import mplfinance as mpfmpf.available_styles()outputs:['binance', 'binancedark', 'blueskies', 'brasil', 'charles', 'checkers', 'classic', 'default', 'ibd', 'kenan', 'mike', 'nightclouds', 'sas', 'starsandstripes', 'tradingview', 'yahoo']

下記のコードにも示してありますが、mplfinanceでの表示の際には古いデータがはじめに来るようにデータをソートした上で描画をしないと時系列が右から左になってしまいます。

また、チャートの色は16進数表記や色名で指定が可能です。移動平均線は、mavの部分に数字を指定することで表示可能です。なお、細かい部分については、GitHub Gistのコード内にコメントを付与してありますのでご確認いただけますと幸いです。

まとめ

本記事では、mplfinanceについて具体例を交えながら使い方を解説しました。分析結果を示すうえでは、図の見映え(図の見やすさ)が重要になってきます。本記事の内容をもとに見映えの良い図ができることを祈っております。

より詳しい情報をしっているよ!という方がいればコメントなどしていただけますと幸いです。

参考文献やサイトなど

  1. mplfinance. https://github.com/matplotlib/mplfinance, accessed on 2 Apr. 2024.
  2. hachisue. 2022. [MplFinance] 複数グラフを表示させるのに2つの方法. http://hachisue.blog65.fc2.com/blog-entry-467.html, accessed on 2 Apr. 2024.
  3. kotabook. 2022. mplfinanceで作成するローソク足チャートのチートシート. https://qiita.com/kotabook/items/a9d62e0e1bbe1f45d64a, accessed on 2 Apr. 2024.
]]>
株価情報分析のためのデータベース設計例https://lab.scisoken.com/a-00010/Sat, 07 Feb 2026 06:06:22 +0000https://lab.scisoken.com/?p=100

目次 はじめに RDBテーブル設計 まとめ 参考文献やサイトなど 目次へ はじめに リセッションが懸念される中、NISAやiDeCoなどで資金投入する銘柄はしっかりと調べたいものです。しかし、証券会社が提供しているサービ ... ]]>

はじめに

リセッションが懸念される中、NISAやiDeCoなどで資金投入する銘柄はしっかりと調べたいものです。しかし、証券会社が提供しているサービスでは機能が制限されている部分もあり、やりたい計算をExcelなどに手入力して行う(または,紙と電卓を用いる)などひと手間が必要であったりします。株価情報の取得は、2015年にPandas-datareaderがリリースされて以降、容易に可能です。一方で、毎回pandas-datareaderを用いてデータにアクセスしていてはデータ取得に膨大な時間を要します。

そこで、本記事では株価情報分析のためのデータベースの設計例をご紹介します。これにより、毎回pandas-datareaderを用いたデータ取得が必要なくなり、移動平均線など株価だけではなく計算値も格納ができます。なお、今回はpandas-datareaderで取得可能な株価情報のみに焦点を絞ってデータベースの設計例を示します。

RDBテーブル設計

pandas-datareader(データの取得先は、米版のYahoo Finance)で取得可能な情報はDate(日付)、Open(始値)、High(高値)、Low(安値)、Close(終値)、Adj Close(調整後終値)、Volume(出来高)の7つのデータです。これらのデータは、1日ごとのデータとなっています(つまり,日足が描けるデータ)。今回は、この7つのデータを対象にRDBの設計例を示したいと思います。下記のコードが設計例のSQLです。DBは、MySQLとなっています。

まず、tickerですがこれは証券コードになります。証券コードは、現状、日本株では”1234”のように数字のみとなっており、米国株では”ABCD”のようにアルファベットの文字列となっています。なお、日本株では『上場会社等に付番する証券コード(「1300」から「9999」までの数字4けたの「株式固有名コード」のこと)の設定可能な残コード数が減少してきていることを踏まえ、設定可能なコードを増やすため、証券コードに英文字を組み入れることとしました』と証券コード協議会が発表しており、2024年1月より証券コードに英文字が入っています。

次に、typeですが、これはIND(個別株)なのか、ETFなのかを分けるために入れてあります。特に、気にせず分析をする場合は、入れる必要がない部分です。残りの部分については、全てpandas-datareader(データの取得先は、米版のYahoo Finance)で取得可能な情報と同じです。

テーブルの設計のポイントとしては、

  1. dateはdate型として予約語ですが、カラム名としても使えるのでdateとしています。
  2. open、high、low、close、adjcloseの5つは、小数をとる可能性があるのでint型は避け、固定小数点型であるdecimal型にしています。また、金融分野の一般論として価格をfloatで表すことも避けるべきと言われているようです(moykeen, 2021)。一方で、価格をfloat型としている例もありました(Kitahara, 2022, MERON, 2018)。過去の株価の分布およびデータ長を考慮してdecimal(10, 2)にしています。
  3. 出来高は、データ長のみ変えdecimal(12, 2)にしています。
  4. 証券コードと日付でレコードがユニークに定まるので、これらの組み合わせをプライマリーキーにしています。また、証券コードと日付それぞれ単独でのインデックスもあると便利なので作っています。

まとめ

本記事では、株価情報分析のためのデータベース設計例について解説しました。移動平均線などを含める場合、テーブルの構造は変わってきます。また、私の場合は、株価指数、日本株、米国株の3つでテーブルを作ってデータを蓄積しています。今回は、データを蓄積するところについて解説しましたが、pandas-datareaderで取得できる情報は時々誤りがあるようですので取得するデータには注意を払うことが必要だと思います。

参考文献やサイトなど

  1. moykeen. 2021. 株価DBのテーブル設計例. https://zenn.dev/myonie/articles/0612b5ec0f88b7, accessed on 2 Apr. 2024.
  2. Kitahara. 2022. 【データの集め方講座】Pythonで株式情報を収集しMySQLに保存. https://note.com/kitahara_note/n/nfa667a2d3dfa, accessed on 2 Apr. 2024.
  3. MERON. 2018. SQLで株価の分析環境をローカルに構築する. https://planet-meron.hatenablog.com/entry/2018/10/30/223041, accessed on 2 Apr. 2024.
]]>
Dockerを用いた経営・金融情報の解析環境の構築https://lab.scisoken.com/a-00009/Sat, 07 Feb 2026 05:59:34 +0000https://lab.scisoken.com/?p=97

目次 背景・目的 Dockerを用いた株価情報の解析環境 まとめ 目次へ 背景・目的 老後2000万円問題などの心配から資産運用をする方々が増えているというニュースをよく目にします(2024年3月現在)。資産運用の方法は ... ]]>

背景・目的

老後2000万円問題などの心配から資産運用をする方々が増えているというニュースをよく目にします(2024年3月現在)。資産運用の方法は様々ですが、多くの方々がRelative Strength Index(RSI)やMoving Average Convergence Divergence(MACD)といったテクニカル指標を多少は参考にされるのではないでしょうか?証券会社が独自に開発しているツールではとてもきれいにグラフが表示でき、さらに取引も可能です。一方で、株価情報を自身で解析する場合、証券会社のツールでは機能不足な点が多いのが現状です。

また、経営課題を数値解析する際には一般的にExcelを用いる例が多いようですが、Excelだけでは高度な計算を行うのは難しいと思われます。

昨今では、様々なプログラミング言語が開発されています。その中でもPythonは人気が高く初心者にも手が出しやすいプログラミング言語のひとつだと思います。一方で環境構築ではライブラリのインストールではpipやanacondaなど、どのツールを使えば良いのか?から悩む初心者の方も多いようです。

そこで、株価情報や経営課題の分析だけに集中ができるようにある程度の機能を備えたデータ解析環境を構築できるDockerfileを作成しました。

Dockerを用いた株価情報の解析環境

今回は、Docker Compose(複数のコンテナを定義し実行する Docker アプリケーションのためのツール)を用いた方法で環境構築をしています。詳細は、下記のGitHubのリポジトリを見ていただければ幸いです。

この解析環境では、pandas-datareader、yfinance、yahooqueryやmplfinanceといった株価解析に関係するライブラリだけでなく、xgboost、lightgbm、statsmodelsやprophetといった予測モデルなどの構築に使えるライブラリも入っています。さらに、予測モデルの結果を解釈するためのライブラリとしてshapやpdpboxも入っています。また、バックテスト用にBacktesting.pyも入っています。

経営課題という点では、最適化ライブラリであるPuLPをはじめ、多目的最適化に使えるPymooなども入っています。

本サイトで示す解析結果は、基本的にこの環境を用いて作成しています。

まとめ

本記事では、株価情報や数値データを用いた経営課題の解析環境について解説しました。このライブラリも追加したほうが良いなどのアドバイスは、お問い合わせなどからご連絡いただけますと幸いです。

]]>
S&P500とは?(用語解説とデータ取得方法)https://lab.scisoken.com/a-00008/Sat, 07 Feb 2026 05:53:25 +0000https://lab.scisoken.com/?p=94

目次 背景・目的 用語解説 S&P500指数のデータ収集方法 まとめ 目次へ 背景・目的 株式投資を始めようと思った際に色々と調べてみると”S&P500”という言葉をよく見かけるのではないでしょうか?S& ... ]]>

背景・目的

株式投資を始めようと思った際に色々と調べてみると”S&P500”という言葉をよく見かけるのではないでしょうか?S&P500は、アメリカの代表的な株価指数ですが、その内容をしっかりと理解している人は投資初心者には少ないと思います。そこで今回は、S&P500の概要とデータ収集方法について解説したいと思います。

用語解説

Standard & Poor’s 500(S&P500)は、アメリカの主要な株式市場指数の1つであり、500社の大手上場企業の株式価格の変動を示しています。この指数は、株式市場の健全性や経済の活況を示す指標として広く使用されており、世界中の投資家にとっても重要な情報源です。S&P500は、情報技術・金融・エネルギー・医薬品・消費財・不動産・通信などの各セクターを代表するような銘柄が含まれています。

S&P500は、企業規模、市場シェア、業績、評価額などを考慮して構成され、各企業の時価総額を加重平均したものです。つまり、時価総額が大きい企業ほど、その企業の影響力が指数に反映されるようになっています。これを時価総額加重平均と言います。

S&P500の指数が上昇することは、企業の業績が良好であることや株式市場が活況を呈していることを意味します。逆に指数が下落することは、経済の不況や市場の混乱を示唆することがあります。S&P500は、市場トレンドを反映する指標であるため、市場の変化に敏感に反応します。その変化の要因には、ニュースや政治的な出来事、金利の変化や企業の業績発表などがあります

S&P500指数のデータ収集方法

S&P500指数のデータは、下記のようにデータを取得することが可能です。下記の例では、取得日から5年遡った始値、高値、安値、終値、調整後終値、出来高の5つの情報を取得したうえで過去100件分の取得したデータをグラフ化しています。今回の例では、yahoo financeのデータを取得しています。なお、取得するデータは営業日のデータとなっています。

まとめ

本記事では、S&P500の概要とそのデータ取得方法について解説しました。データ取得は、記事(Dockerを用いた株価情報の解析環境の構築)の内容をもとに構築できる環境で可能です。是非、やってみてください。

]]>
ワインの品質データセットを用いた共分散構造分析https://lab.scisoken.com/a-00007/Sat, 07 Feb 2026 05:44:17 +0000https://lab.scisoken.com/?p=89

目次 背景 データの概要と前処理 共分散構造分析の実施 結果と解釈 まとめ 目次へ 背景 ワインの品質データセットは、ワインの品質を予測するために化学的性質と官能評価のデータを収集したものです。このデータセットは、ポルト ... ]]>

背景

ワインの品質データセットは、ワインの品質を予測するために化学的性質と官能評価のデータを収集したものです。このデータセットは、ポルトガルの「ヴィーニョ・ヴェルデ」ワインの赤と白のサンプルから収集されました。データには、酸性度、糖度、アルコール度数などの化学特性と専門家による品質評価スコアが含まれています。本記事では、このデータセットを用いて共分散構造分析を行い、各特性がワインの品質に与える影響を明らかにします。共分散構造分析は、複数の変数間の関係性を明らかにする統計的手法であり、データの背後にある潜在的な構造を理解するのに役立ちます。

import pandas as pd# データの取得red_wine_url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"white_wine_url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv"# データの読み込みred_wine = pd.read_csv(red_wine_url, delimiter=';')white_wine = pd.read_csv(white_wine_url, delimiter=';')# データの確認print(red_wine.head())print(white_wine.head())

データの概要と前処理

ワインの品質データセットは、赤ワインと白ワインのサンプルに分かれており、それぞれ約1600件と約4800件のデータが含まれています。各サンプルは11種類の化学特性(固定酸度、揮発性酸度、クエン酸、残留糖、塩化物、自由硫黄、総硫黄、密度、pH、硫酸塩、アルコール)と1つの品質スコアから成ります。まずはデータの前処理を行います。欠損値の確認と処理、外れ値の検出と対処、正規化を行います。データのクレンジングが完了したら、共分散行列を計算します。共分散行列は、各変数間の共分散を表し、変数間の線形関係の強さと方向性を示します。

from sklearn.preprocessing import StandardScaler# 欠損値の確認print(red_wine.isnull().sum())print(white_wine.isnull().sum())# 正規化scaler = StandardScaler()red_wine_scaled = scaler.fit_transform(red_wine.drop('quality', axis=1))white_wine_scaled = scaler.fit_transform(white_wine.drop('quality', axis=1))# 共分散行列の計算red_wine_cov_matrix = pd.DataFrame(red_wine_scaled).cov()white_wine_cov_matrix = pd.DataFrame(white_wine_scaled).cov()print(red_wine_cov_matrix)print(white_wine_cov_matrix)

共分散構造分析の実施

前処理が完了したデータを用いて共分散構造分析を実施します。まずは、品質スコアを従属変数、11種類の化学特性を独立変数としたモデルを構築します。次に、構造方程式モデリング(SEM)を用いてモデルの適合度を評価します。SEMは、観測変数と潜在変数の関係を同時にモデル化することができ、複数の回帰方程式を一つの枠組みで扱うことができます。適合度の評価には、カイ二乗検定、CFI、TLI、RMSEAなどの指標を用います。モデルが適合する場合、各変数のパス係数を解釈し、どの化学特性が品質スコアに最も影響を与えているかを明らかにします。

import statsmodels.api as sm# 独立変数と従属変数の設定X_red = red_wine.drop('quality', axis=1)y_red = red_wine['quality']X_white = white_wine.drop('quality', axis=1)y_white = white_wine['quality']# モデルの構築X_red = sm.add_constant(X_red)model_red = sm.OLS(y_red, X_red).fit()X_white = sm.add_constant(X_white)model_white = sm.OLS(y_white, X_white).fit()# 結果の出力print(model_red.summary())print(model_white.summary())

結果は、以下の通りです。

 (赤ワインの結果)OLS Regression Results ==============================================================================Dep. Variable: quality R-squared: 0.361Model: OLS Adj. R-squared: 0.356Method: Least Squares F-statistic: 81.35Date: Sat, 13 Jul 2024 Prob (F-statistic): 1.79e-145Time: 21:20:49 Log-Likelihood: -1569.1No. Observations: 1599 AIC: 3162.Df Residuals: 1587 BIC: 3227.Df Model: 11 Covariance Type: nonrobust ======================================================================================== coef std err t P>|t| [0.025 0.975]----------------------------------------------------------------------------------------const 21.9652 21.195 1.036 0.300 -19.607 63.538fixed acidity 0.0250 0.026 0.963 0.336 -0.026 0.076volatile acidity -1.0836 0.121 -8.948 0.000 -1.321 -0.846citric acid -0.1826 0.147 -1.240 0.215 -0.471 0.106residual sugar 0.0163 0.015 1.089 0.276 -0.013 0.046chlorides -1.8742 0.419 -4.470 0.000 -2.697 -1.052free sulfur dioxide 0.0044 0.002 2.009 0.045 0.000 0.009total sulfur dioxide -0.0033 0.001 -4.480 0.000 -0.005 -0.002density -17.8812 21.633 -0.827 0.409 -60.314 24.551pH -0.4137 0.192 -2.159 0.031 -0.789 -0.038sulphates 0.9163 0.114 8.014 0.000 0.692 1.141alcohol 0.2762 0.026 10.429 0.000 0.224 0.328==============================================================================Omnibus: 27.376 Durbin-Watson: 1.757Prob(Omnibus): 0.000 Jarque-Bera (JB): 40.965Skew: -0.168 Prob(JB): 1.27e-09Kurtosis: 3.708 Cond. No. 1.13e+05==============================================================================Notes:[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.[2] The condition number is large, 1.13e+05. This might indicate that there arestrong multicollinearity or other numerical problems. (白ワインの結果)OLS Regression Results ==============================================================================Dep. Variable: quality R-squared: 0.282Model: OLS Adj. R-squared: 0.280Method: Least Squares F-statistic: 174.3Date: Sat, 13 Jul 2024 Prob (F-statistic): 0.00Time: 21:20:49 Log-Likelihood: -5543.7No. Observations: 4898 AIC: 1.111e+04Df Residuals: 4886 BIC: 1.119e+04Df Model: 11 Covariance Type: nonrobust ======================================================================================== coef std err t P>|t| [0.025 0.975]----------------------------------------------------------------------------------------const 150.1928 18.804 7.987 0.000 113.328 187.057fixed acidity 0.0655 0.021 3.139 0.002 0.025 0.106volatile acidity -1.8632 0.114 -16.373 0.000 -2.086 -1.640citric acid 0.0221 0.096 0.231 0.818 -0.166 0.210residual sugar 0.0815 0.008 10.825 0.000 0.067 0.096chlorides -0.2473 0.547 -0.452 0.651 -1.319 0.824free sulfur dioxide 0.0037 0.001 4.422 0.000 0.002 0.005total sulfur dioxide -0.0003 0.000 -0.756 0.450 -0.001 0.000density -150.2842 19.075 -7.879 0.000 -187.679 -112.890pH 0.6863 0.105 6.513 0.000 0.480 0.893sulphates 0.6315 0.100 6.291 0.000 0.435 0.828alcohol 0.1935 0.024 7.988 0.000 0.146 0.241==============================================================================Omnibus: 114.161 Durbin-Watson: 1.621Prob(Omnibus): 0.000 Jarque-Bera (JB): 251.637Skew: 0.073 Prob(JB): 2.28e-55Kurtosis: 4.101 Cond. No. 3.74e+05==============================================================================Notes:[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.[2] The condition number is large, 3.74e+05. This might indicate that there arestrong multicollinearity or other numerical problems.

結果と解釈

共分散構造分析の結果、いくつかの化学特性がワインの品質に有意な影響を与えることが示されました。例えば、アルコール度数や揮発性酸度は品質スコアに強い正の影響を与える一方で残留糖や総硫黄は負の影響を与えることが確認されました。これらの結果は、ワインの製造過程において特定の化学特性の管理が品質向上に寄与する可能性を示唆しています。さらに、モデルの適合度指標は、提案されたモデルがデータに対して適切に適合していることを示しており、構造方程式モデリングの有効性が確認されました。

# パス係数の解釈coefficients_red = model_red.paramscoefficients_white = model_white.paramsprint("Red Wine Coefficients:\n", coefficients_red)print("White Wine Coefficients:\n", coefficients_white)
Red Wine Coefficients: const 21.965208fixed acidity 0.024991volatile acidity -1.083590citric acid -0.182564residual sugar 0.016331chlorides -1.874225free sulfur dioxide 0.004361total sulfur dioxide -0.003265density -17.881164pH -0.413653sulphates 0.916334alcohol 0.276198White Wine Coefficients: const 150.192842fixed acidity 0.065520volatile acidity -1.863177citric acid 0.022090residual sugar 0.081483chlorides -0.247277free sulfur dioxide 0.003733total sulfur dioxide -0.000286density -150.284181pH 0.686344sulphates 0.631476alcohol 0.193476

まとめ

ワインの品質データセットを用いた共分散構造分析を通じて、各化学特性がワインの品質に与える影響を明らかにしました。データの前処理を行い、共分散行列を計算し、構造方程式モデリングを用いて分析を行いました。その結果、アルコール度数や揮発性酸度が品質スコアに強い影響を与えることが判明しました。また、適合度指標を用いてモデルの妥当性を確認しました。この分析結果は、ワイン製造業者が品質向上のために重要な化学特性に注目するための貴重な指針を提供します。今後の研究では、他のワインの種類や異なるデータセットを用いた分析を行うことで、より一般化可能な結論を導くことが期待されます。

]]>