質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3082閲覧

predict関数のエラーを解消したい

Shin_go

総合スコア19

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/17 08:24

編集2021/10/24 16:59

pythonのpredict関数のエラーが調べてもよくわからないのですが、
どなたか解消の方法がわかれば教えていただけますか。

以下の重回帰分析により、1~135週までの取引データを使ってモデルを作成し、

Python

1ary_x = np.array(train_query_x) 2ary_x = sm.add_constant(ary_x) 3ary_y = np.array(train_query_y) 4model = sm.OLS(ary_y, ary_x) 5result = model.fit() 6result.summary()

上記で出来上がったモデルresultを使って、
136週から145週までのnum_orders(オーダー数)を予測するというものです。
よって、
目的変数:num_orders
説明変数:num_orders以外の変数(列名)
ということになります。
(データフレームは一番下に冒頭の5行を記載しています。)

python

1 2# 1~145週まであるデータフレームから予測したい136週から145週を抽出 3train_query_demand = train_dummy[136:145] 4train_query_demand 5 6#説明変数だけのデータフレーム(num_ordersを除いたもの)に整理 7train_query_demand_x = train_query_demand[['checkout_price', 'base_price', 'emailer_for_promotion',\ 8 'homepage_featured', 'op_area', 'TYPE_B', 'TYPE_C',\ 9 'Biryani', 'Desert', 'Extras', 'Fish', 'Other Snacks', 'Pasta', 'Pizza',\ 10 'Rice Bowl', 'Salad', 'Sandwich', 'Seafood', 'Soup', 'Starters',\ 11 'Indian', 'Italian', 'Thai']] 12train_query_demand_x 13 14# 得られたモデルresultからpredict関するを使って予測する 135週から145週のnum_orders予測 15df_pred_y = pd.DataFrame(result.predict(sm.add_constant(train_query_demand_x)), columns=['num_orders']) 16df_pred_y 17

以下はエラーのコードと画面です。

python

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-310-d3bd08443293> in <module>() 4 1 # 得られたモデルから予測する 135週から145週の売上数量予測 5----> 2 df_pred_y = pd.DataFrame(result.predict(sm.add_constant(train_query_demand_x)), columns=['num_orders']) 6 3 df_pred_y 7 81 frames 9/usr/local/lib/python3.7/dist-packages/statsmodels/regression/linear_model.py in predict(self, params, exog) 10 362 exog = self.exog 11 363 12--> 364 return np.dot(exog, params) 13 365 14 366 def get_distribution(self, params, scale, exog=None, dist_class=None): 15 16<__array_function__ internals> in dot(*args, **kwargs) 17 18ValueError: shapes (9,23) and (24,) not aligned: 23 (dim 1) != 24 (dim 0) 19

<使っているデータフレーム>
以下のデータフレームが、weekが1~145行まであり、1~135行目までは、num_ordersの数値があり
136~145行までは、num_ordersの数値がなく、この数値をpredictを使って予測したいのですが、上記エラーが出てしまいます。
(表の記述の仕方がわからず、見にくいかもしれずすみません。)

python

1 2week checkout_price base_price emailer_for_promotion homepage_featured num_orders op_area TYPE_B TYPE_C Biryani Desert Extras Fish Other Snacks Pasta Pizza Rice Bowl Salad Sandwich Seafood Soup Starters Indian Italian Thai 31 965809.26 1018365.32 357 414 792261 4.079876797 602 643 175 210 94 0 198 212 231 231 0 230 166 79 209 820 673 811 42 938092.43 1005779.2 621 514 787084 4.085013812 602 625 159 203 93 0 196 209 230 230 0 229 168 82 211 795 668 813 53 948560.28 1008352.05 104 316 695262 4.078682304 596 635 167 201 93 0 199 210 227 231 0 230 167 82 208 800 671 812 64 953833.69 1006446.9 0 292 743529 4.087746625 589 618 155 204 96 0 199 193 230 231 0 230 170 85 214 789 654 825 75 901141.58 1001075.16 337 466 1198675 4.077824414 548 642 154 207 95 0 195 190 222 228 0 227 189 79 209 780 645 803 8 9 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/22 22:19

csv形式であれば共有できると思います。レコードを抜粋した形でアップロードできますか? 画像をアップロードする際にはタブとかブックマークが写らないようにした方が"事故"の可能性がグーンとさがります。
Shin_go

2021/10/22 23:48

アドバイスいただきありがとうございます。そうですね。そういう観点も必要ですね。
退会済みユーザー

退会済みユーザー

2021/10/23 01:45

```csv 1,2,3,4 ``` みたいな感じでいいのでダミーデータか本物のデータの項目軸の名称を変えたもの、なんでもいいので検証できるものを記入ください。数値をいじる系の質問の場合、生データなしに検証を進めるのは骨が折れます。生データがムリであればでたらめなデータでいいので「本物と同じ形式のデータ」を掲載ください。
Shin_go

2021/10/23 04:14

ありがとうございます。 もしかしましたら、おっしゃられる意図と違うのかもしれませんが、追記いたしました。 列名と1行目の数値 ですが、意図と異なっていましたらまたおっしゃっていただければと存じます。
Shin_go

2021/10/23 04:15

WEEKが1~145週目まであり、136~145週までは、num_ordersがブランクになっており、 1~135週までまでは、重回帰でモデルをもとめ、136~145週を predict関数で当てる、というモデルになります。
退会済みユーザー

退会済みユーザー

2021/10/23 05:16

エクセルで言うと系列名がAEまで、数値はAC列までとなりました。これで合っていればいいですが、間違っていた場合には、生のファイルをCSVで保存して最小限のデータだけ week,checkout_price,base_price, のようなフォーマットにしてください。スペースでは区切りが明確にできませんのでコンマ区切りのCSVでお願いします。
Shin_go

2021/10/24 16:59

すみません、ご依頼のフォーマットで投稿するやり方がわからずでして。。 申し訳ございません。
jbpb0

2021/10/26 02:54 編集

> 1~135週までの取引データを使ってモデルを作成 print(ary_x.shape) を実行したら、結果は (135, 24) となりますか? > 136週から145週までのnum_orders(オーダー数)を予測 print(sm.add_constant(train_query_demand_x).shape) を実行したら、結果は (10, 24) となりますか? (136週と145週を両方含む場合は10週) > shapes (9,23) and (24,) not aligned: 23 (dim 1) != 24 (dim 0) となるのなら、おそらく print(sm.add_constant(train_query_demand_x).shape) の結果は、 (9, 23) となると思いますので、確認してみてください 確認して、やはり二つ目が「23」だったなら、説明変数のどれかが足りません コードの「#説明変数だけのデータフレーム(num_ordersを除いたもの)に整理」のところの項目を数えたら23個あり、それに「sm.add_constant()」で一個増えて24個あるはずなので
jbpb0

2021/10/26 03:05 編集

「(9, 23)」の一つ目の「9」は、たぶんこのエラーの直接の原因では無いですが、136〜145週は10週あるのに「9」なのは、Pythonの行は「0」から始まるので1週目が0行目となることを考慮せずに > # 1~145週まであるデータフレームから予測したい136週から145週を抽出 > train_query_demand = train_dummy[136:145] とやってるからで、 train_query_demand = train_dummy[135:145] とすれば10週分取り出せると思います
guest

回答1

0

shapes (9,23) and (24,) not aligned: 23 (dim 1) != 24 (dim 0)

python

1print(sm.add_constant(train_query_demand_x).shape)

を実行したら、結果が「(9, 23)」になると思いますので、確認してみてください

確認して、やはり二つ目が「23」だったなら、説明変数のどれかが足りません
コードの「#説明変数だけのデータフレーム(num_ordersを除いたもの)に整理」のところの項目を数えたら23個あり、それに「sm.add_constant()」で定数項が加わって24個になるはずなので

投稿2021/10/28 06:16

編集2021/10/28 06:17
jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問