Skip to content

実用的なデータサイエンス処理事例の紹介

Notifications You must be signed in to change notification settings

yoshisen/data-science-example

Repository files navigation

小売業界の商品および顧客に対する予測分析をデータサイエンスの方法

1. データの取得 (データ収集)

主なデータソース:

  • 販売データ:商品ID、売上数量、売上金額、販売日、店舗ID。
  • 顧客データ:顧客ID、年齢、性別、地域、購買履歴。
  • 外部データ:天気データ、祝日情報、キャンペーン情報、経済指標。

データ取得方法:

  • データベース:SQLを使用して販売データを取得。
    SELECT product_id, customer_id, sales, date FROM sales_data;
  • API:外部データ(天気やキャンペーン情報)を取得。
  • CSV/Excelファイル:社内で保存されている履歴データ。

2. データの前処理 (データクレンジング)

主な処理内容:

  1. 欠損値の処理
    • 欠損部分を特定し、平均値、中央値、またはゼロで補完。または、場合によっては欠損データを削除。
    data['sales'].fillna(data['sales'].mean(), inplace=True)
  2. 異常値の処理
    • 箱ひげ図やZスコアを使用して異常値を検出し、必要に応じて修正または除外。
    from scipy.stats import zscore
    data = data[(zscore(data['sales']) < 3)]
  3. データ型の統一
    • 日付型のデータを適切なフォーマットに変換。
    data['date'] = pd.to_datetime(data['date'])
  4. カテゴリ変数のエンコード
    • One-HotエンコーディングまたはLabel Encodingを使用。
    from sklearn.preprocessing import OneHotEncoder
    encoder = OneHotEncoder()
    encoded_features = encoder.fit_transform(data[['category']])

3. データ分析と可視化

分析:

  • 売上トレンド分析
    • 時系列データを分析し、季節性やトレンドを特定。
  • 顧客セグメンテーション
    • 購入頻度、平均購入金額、再購入率を基に顧客を分類。
  • 商品人気分析
    • 売上ランキングや売れ筋商品の特定。

可視化:

  • 時系列プロット:売上データの推移。
    import matplotlib.pyplot as plt
    data.groupby('date')['sales'].sum().plot()
    plt.show()
  • ヒートマップ:特徴量間の相関関係を視覚化。
    import seaborn as sns
    sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
  • クラスタリング結果の可視化
    • PCAやt-SNEを用いて高次元データを2次元に圧縮し、顧客や商品クラスタを視覚化。

4. 特徴エンジニアリング

主な特徴量:

  1. 時系列特徴量
    • 曜日、月、季節、祝日フラグ。
    data['day_of_week'] = data['date'].dt.dayofweek
  2. ラグ特徴量
    • 過去の売上(例:1週間前、1ヶ月前の売上)。
    data['lag_7'] = data['sales'].shift(7)
  3. 集約特徴量
    • 商品別、店舗別、顧客別の平均売上や最大売上。
    data['mean_sales'] = data.groupby('product_id')['sales'].transform('mean')
  4. 外部データの統合
    • 天気や祝日情報を結合して予測に活用。

5. モデル選定と訓練

モデル選定:

  • 販売予測:回帰モデル(XGBoost、LightGBM)、時系列モデル(ARIMA、Prophet)。
  • 顧客分析:クラスタリング(K-Means、DBSCAN)、分類モデル(ロジスティック回帰、ランダムフォレスト)。

モデル訓練:

  1. データ分割
    • 訓練データとテストデータに分割。
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  2. クロスバリデーション
    • ハイパーパラメータを選択するための交差検証。
    from sklearn.model_selection import GridSearchCV
    param_grid = {'n_estimators': [100, 200], 'max_depth': [3, 5, 7]}
    grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
    grid.fit(X_train, y_train)
  3. モデル学習
    • 最適なパラメータを用いて最終モデルを訓練。
    model = grid.best_estimator_
    model.fit(X_train, y_train)

6. モデル評価

  • 評価指標
    • 回帰モデル:MAE(平均絶対誤差)、RMSE(平方平均二乗誤差)、R2スコア。
    • 分類モデル:精度(Accuracy)、再現率(Recall)、F1スコア。
    from sklearn.metrics import mean_absolute_error, r2_score
    mae = mean_absolute_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print(f"MAE: {mae}, R2: {r2}")

7. モデルの運用化 (デプロイ)

デプロイ方法:

  • API化:FlaskやFastAPIで予測モデルを提供。
    from flask import Flask, request, jsonify
    app = Flask(__name__)
    
    @app.route('/predict', methods=['POST'])
    def predict():
        input_data = request.json
        prediction = model.predict(input_data)
        return jsonify({'prediction': prediction.tolist()})

継続的な運用:

  • 新しいデータを使った再トレーニング
    • 定期的に新しい販売データを取得し、モデルを更新。
  • ダッシュボードの構築
    • TableauやPower BIを使用して予測結果をリアルタイムで監視。

About

実用的なデータサイエンス処理事例の紹介

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published