見出し画像

プログラミング初心者が映画作品のトータルセールスを回帰分析してみた

はじめに


自己紹介

初めまして。通りすがりでも閲覧いただきありがとうございます。
アラサーのIT企業に勤めるサラリーマンです。
Aidemy Premiumにて「データ分析コース」を3ヶ月受講いたしました。

そもそもAidemy Premiumを受講したのは、データ分析、機械学習、Pythonを学びそちらを活かした仕事をしていきたいと思ったことが、きっかけでした。
今後はデータドリブンの領域や需要拡大に興味があったりします。
そもそも、note自体も過去書いたことない人間ですが、こちらを皮切りに日記や備忘録の感覚で学んだことや気付いたことを残していけたらいいなぁ、なんて思っています。

実行環境


Google Colaboratory


本記事の概要

そもそも、どんな記事の内容なのか、という観点ですと、

  • どんな人に読んで欲しいか
    →データ分析ってそもそも何?と思われているPythonなどにそれほど詳しくない方、など

  • この記事に書くこと、わかること
    →興味のある映画データを題材に回帰分析を行っていきたいと思います。

    • この記事で扱わないこと
      まずは最初のステップとしてデータを整理→学習→検証データをもとにどういった予測になるかをみていくので、グラフ化までは見据えていません。

作成したプログラム

1. データの読み込み

まずは、映画館に関連するkaggle引用データを読み込みます。

import pandas as pd
from sklearn.model_selection import train_test_split
# 必要なモジュールを追記
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.linear_model import LinearRegression

# データの読み込み(可変)
cinema_data = pd.read_csv("/content/drive/MyDrive/成果物/cinemaTicket_Ref.csv")
#欠損値を削除する
cinema_data = cinema_data.drop("date",axis=1).dropna()
#実際に表示して確認
cinema_data
上記のような映画に関するデータが入っていることが確認できました

ここからはtrainにあたる訓練データと、testにあたるテストデータを分割して学習していき、分割した残りのデータを対象に予測します。

2.訓練データとテストデータを定義し、決定係数を計測

# トータルセールスを対象に、訓練データ:テストデータを分割する。
cinema_train_X, cinema_test_X, cinema_train_y, cinema_test_y = train_test_split(
    cinema_data.drop('total_sales', axis=1),
    cinema_data['total_sales'], random_state=42)
 #決定係数を計測  #線形回帰 
model_linear = LinearRegression()
model_linear.fit(cinema_train_X, cinema_train_y)
print("線形回帰:",model_linear.score(cinema_test_X, cinema_test_y))
 #lasso回帰 
model_lasso = Lasso()
model_lasso.fit(cinema_train_X, cinema_train_y)
print("ラッソ回帰:",model_lasso.score(cinema_test_X, cinema_test_y))
 #ridge回帰 
model_ridge = Ridge()
model_ridge.fit(cinema_train_X, cinema_train_y)
print("リッジ回帰:",model_ridge.score(cinema_test_X, cinema_test_y))

上記実行してみると以下のようにそれぞれのモデルで決定係数を算出できます。

線形回帰: 0.8697207165669348
ラッソ回帰: 0.869720716922912
リッジ回帰: 0.8697207157086239
/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 5.357e+18, tolerance: 1.038e+16
  model = cd_fast.enet_coordinate_descent(

そもそも決定係数は「該当のモデルがどの程度目的変数を説明できるか」を表しています。
0から1の間の値をとり、分析精度が高いほど数値は大きくなります。
今回は「それなりに高い」結果と言えそうです。
さらには今回の3モデル比較はラッソ回帰モデルが一番高い数値を出しているので、ラッソ回帰モデルがより精度が高くなる見込みが立ちます。

3.実際の数値予測

 #テストデータを使ったtotal_salesの3つの予測 
print("線形回帰の予測値:",model_linear.predict(cinema_test_X))
print("ラッソ回帰の予測値:",model_lasso.predict(cinema_test_X))
print("リッジ回帰の予測値:",model_ridge.predict(cinema_test_X))

上記で数値予測をすると、以下のように予測値が実際に出てきます。

線形回帰の予測値: [-2120117.22050487  2258280.95543195  1492430.38459895 ...
 -9762533.50318259  4644379.91897279   -59632.13389425]
ラッソ回帰の予測値: [-2120120.68641205  2258277.65206297  1492430.31713964 ...
 -9762530.55081835  4644379.83620919   -59628.4844349 ]
リッジ回帰の予測値: [-2120167.53566295  2258233.96236056  1492428.14839943 ...
 -9762501.36875479  4644373.86617535   -59583.82008665]

4.データからの考察

  • サンプルのデータ数がそれなりな数あったので比較的高い決定係数が割り出せたのではと思います。対照的な例として、実務でも訓練データが思うほど集まらなくて精度が伸びないという声をうかがったことがあるので、感覚的にとらえていた点がデータによりより説得力のある形となったかと思います。

  • データとして余分な情報がたくさん存在するような今回のデータの場合には、ラッソ回帰を利用するのが良さそう。

  • 今回採用しなかった、リッジ回帰の特徴としては過学習を防ぐ効果がある。そもそも過学習はモデルが訓練データに対して過剰に適合してしまい、新しいデータに対する予測性能が低下する現象のこと。そのため、リッジ回帰では、正則化パラメータを調整することで、モデルの複雑さを抑え、過学習のリスクを低減させることができる点でメリットがあり、今回のようなデータセットには比較的適さないことが実地確認できた。


今後の活用

同じIT企業の一環ではありますが、今後はよりデータ分析などを取り扱う業種・領域に飛び込んで、こちらで学んだことを少なくとも発揮でき・より重宝される人材になっていきたいなと思っています。
今回は入り口としてデータ分析をpythonベースで体系的に学ぶことができたので、ある意味ここからが実践といいますか本番だと思っています。
閲覧いただいている皆さんも、何か目標持っていたり、将来像を見据えていらっしゃると思うので、いきなり飛躍するというよりかは着実にステップを踏んで徐々に理解できるようになることが大事かなと思いました。


おわりに

つたない成果物ではございますが、ここまで読んでいただきありがとうございました!
今回の気付きとしては実際に手を動かしてTRY & ERRORでも徐々にアウトプットしていくことで自分自身の学びや達成感を感じられるんだなと当たり前ながら思いまして、今後も何かをインプットする過程の中で理解したことを残していくことは大事だなぁ、とこの年齢にして今更実感しています笑

今回の成果物をきっかけに趣味や興味のある分野もデータとして分析することでQOL(Quality of life)を高めていけたらいいなと思っています。

それでは、こちらはこのあたりで✋

※このブログはAidemy Premiumのカリキュラムの一環で、受講修了条件を満たすために公開しています。


この記事が気に入ったらサポートをしてみませんか?