農業ビジネスにおいて、毎年の作物の収穫量を正確に予測する能力は、ビジネスの効率性、収益性、そして持続可能性を高める上で不可欠です。収穫量をより早く予測できれば、資源の配分、サプライチェーンの管理、収穫計画、そして保管ロジスティクスの決定をより効率的に行うことができます。
テンサイ産業における現在の課題は気候変動であり、毎年の収穫量の変動が拡大しています。急速に変化する気象条件により、収穫量の予測が困難になり、最終的にはすべての関係者のコストが増大します。
データ分析と機械学習の力を活用することは、収穫量予測の精度と適時性を向上させる一つの方法です。テンサイの収穫量を予測するための予測モデルはJMPで構築されました。データ収集、クリーニング、前処理、探索的データ分析、特徴量エンジニアリング、モデル選択、学習、評価、チューニング、そしてその後の展開と保守まで、すべてのプロセスがJMPだけで実行可能でした。
皆さん、こんにちは。今日はJMPを使った予測モデリング、特に農業生産高についてお話したいと思います。ただし、これからご紹介するプロセスは農業生産高だけに限った話ではありません。何にでも使えます。皆さんが自分でJMPを使って分析する方法を少しでも理解していただければ幸いです。JMPで使えるちょっとしたコツは、特に農業生産高の予測に役立つでしょう。先ほども申し上げたように、このプロセスはどんな予測対象にも応用できます。
JMPで予測モデルを構築する方法、特に農業の収穫高に関する例をいくつか挙げて、大まかなガイドを提供します。先ほど述べたように、JMPはあらゆる予測プロセスに活用できます。ここでの具体的な課題は、農業におけるビジネス上の意思決定において、作物の収穫高を早期に正確に予測することが非常に重要であるということです。しかし、これを困難にしている要因の一つは、テンサイの収穫高と品質が年ごとに大きく変動することです。この変動は、時間とともに頻度と深刻度が増大し、予測を困難にしています。収穫高を正確に予測するためには、JMPのようなアプリケーションの予測機能を活用することがますます重要かつ不可欠になっています。
変動が拡大しているように見える主な理由の一つは気候変動です。これから見ていきますが、テンサイ栽培の概要をご説明したいと思います。収量とは、具体的に何を意味するのでしょうか?これはテンサイですが、収量には2つの側面があります。1つ目はテンサイの大きさです。ここには、洗浄後の根の重量が記載されています。ご覧の通り、このテンサイには土が付いています。その後、洗浄され、その重量が収量を構成する要素の一つとなります。
2つ目の要素は品質要素、つまりこのビートに含まれる糖度です。つまり、単純に言えば、糖度とビートの大きさを掛け合わせたものが、達成できる収量となります。
では、収穫量を正確に予測するにはどうすればよいでしょうか?まずは、まず重要な点から始めましょう。これは業種を問わず同じ考え方です。私たちが目指すのは、できるだけ多くの場所と年数にわたって、可能な限り多くのデータを収集し、農業収穫量に影響を与える可能性のある可能な限り多くの要因と、比較可能な結果、収穫量値を含む、1つの大きな表形式のデータセットを作成することです。従属変数に加えて、多くの独立変数を含む大規模な履歴データセットを作成します。
農業の場合、これらの例のいくつかでは収穫量データが本当に必要であり、理想的には土壌の健康状態、天候、害虫と病気、農場管理方法、種子の種類、土壌地形データ、リモートセンシングデータなどに関するデータが必要です。データの数が多いほど、このデータの品質が向上し、収穫量をより正確に予測できます。また、収穫量の変動をより正確にこれらの要因の 1 つに割り当てることができるため、これらの変数間の変動をより多く識別できるようになります。
農業では、最終的な収穫量に影響を与える可能性のある変数は数多く存在します。1つのデータセットにすべての情報を網羅することは、不可能ではないにしても、ほぼ不可能です。しかし、目標は収穫量を正確に予測するために、できるだけ多くのデータを取得することです。まず、入手可能なすべてのデータを探し出し、それらを1つのデータセットに統合し、データを整理・加工します。次に、JMPで探索的データ分析を行い、データセットに潜むパターンや傾向を発見します。そこから、テンサイの品質と収穫量の最も重要な予測因子を特定できます。そして、それらの重要な予測因子を用いて予測モデルを構築し、将来の収穫量を予測することができます。
JMPのプロセスの概要を簡単に説明します。最初のステップはデータ収集です。実はこれが最も重要なステップです。どれだけ強調しても足りないくらいです。データの品質は非常に重要です。私のメンターの一人がよく言うのは「Rubbish in, Rubbish out(ゴミを入れればゴミが出る)」です。良質なデータがなければ、どんなに優れたプロセスを持っていても、優れたモデルを構築することはできません。本当に質の高いデータを取得することに重点を置く必要があります。
農業における利点の一つは、収穫量に大きく影響する重要な変数の一つが天候だということです。今日の技術では、畑や地域など、どんな場所であっても、過去の気象データを非常に優れた方法で取得することができます。別の情報源から気象データを非常に正確に取得し、活用できる技術も存在します。
農業において、これは非常に役立つパズルの一つです。なぜなら、多くの場合、協力企業や自社が既に優れたデータ管理手法を導入し、多くの重要な変数を追跡し、可能な限り多くのデータを収集し、簡単にアクセスできるように適切に保管していることが前提となるからです。そうでない場合、優れた予測モデルを構築できる可能性は低くなり、本当に優れたモデルを構築するために必要なデータを収集するには何年もかかる可能性があります。
次に、データクリーニング、前処理、特徴量エンジニアリング、探索的データ分析、モデルのスクリーニング、学習、チューニング、そして評価があります。そして最後に、モデルの展開、場合によってはメンテナンスです。ここでの最初のステップは、データを収集することです。先ほども述べたように、そして多くの場合、データは様々な場所、様々なデータベース、そして場合によっては様々なシートに保存されています。JMPの目的は、これらすべてを統合することです。
この特定のケースでは、農業収穫量に関するデータセットが3つありました。シーズン中のサンプルデータ、気象データ、そして最終的な収穫量データです。重要なのは、すべてのデータセットに共通する要素を見つけることです。これは後ほど説明します。JMPのクエリビルダーを使えば、これらのデータソースを非常に迅速かつストレスなく、正確に、そして簡単に1か所にまとめることができます。この特定のケースでは、共通要素は契約番号と年であり、これらを結合することでデータを統合することができました。
早速、最初のステップであるデータの前処理について見ていきましょう。データの正規化は、お持ちのデータや分析内容によっては必要な場合と不要な場合がありますが、モデルの性能向上に繋がる可能性があります。JMPで確認してみましょう。JMPプラットフォームと気象データが表示されています。これを開いて分布を見ると、気象変数がいくつか表示されます。これらを分布に投入します。
さて、ここを見てください。少し拡張してみましょう。この降水量データを見ると、左に偏っていることがわかります。正規化されていないデータでは、モデルに問題が生じる可能性があります。偏ったデータの関係性をモデルが識別するのが難しくなる可能性があります。これを修正する方法の一つは、データを正規化することです。この積算降水量データを使って、JMPでデータセットを見つけます。新しい列を挿入しましょう。計算式です。さて、問題の列は降水量でした。
さて、このデータを正規化するために、左に偏ったデータの平方根を求めます。これを列の数式に追加します。「適用」をクリックします。新しい列が追加されました。分かりやすいように名前を変更しましょう。「正規化降水量」です。分布に戻り、2つの列を一緒に見てみましょう。これらは無視してください。これは後で出てきます。元のデータが表示されています。軸をここに貼り付けます。
ご覧の通り、元のデータの分布は明らかに左に偏っています。正規化されたデータでは平方根を取っているので、このデータを使ったモデリングははるかに容易になります。ただし、ここで一つ問題があります。クライアントと作業する際に覚えておかなければならないのは、例えば降水量はクライアントにとって非常に簡単に解釈できるということです。しかし、この平方根を取ったデータを使ったモデルをクライアントに提示しようとすると、降水量の平方根はもはや解釈不能になり、多くの場合、クライアントは説明しやすいデータを求めています。このプロセスの最後に、これらの値を逆平方根にして、クライアントにとって分かりやすくする必要があるかもしれません。
とにかく、それができることの一つです。スライドショーに戻りましょう。次のステップは、データのクリーニングです。フォーマット設定は多くの場合非常に役立ちます。まず最初に見るべきことは、テーブルの分割です。このデータセットでは、降水量、気温、最低気温、最高気温のそれぞれに異なる列があり、さらに月ごとの列があることに気付くでしょう。今回の分析では、月ごとの列と気温変数ごとの列を持つのは理想的ではないかもしれません。これを変更したいので、テーブルを開いて分割します。月ごとに分割します。気象データを分割し、残りの列はすべて保持します。
この新しいデータセットには、データセット内の各月に対応する列があります。これは作業にとって非常に便利です。1月目、2月目と、各月に対応する列があります。これは注目すべき点の一つです。ここでは閉じて、今はそのままにしておきましょう。次に、データの結合を行います。これはJMPの非常に便利な機能で、複数のデータセットを非常に簡単に結合できます。簡単に見てみましょう。
ここで天気のデータセットが開かれているのがわかります。先ほどデータを分割したので、ここに契約IDと利回りの2つ目のテーブルがあります。そして、サイトも表示されています。このデータセットを天気と結合したいのですが、どうすればいいでしょうか?利回りデータセット、テーブル、クエリビルダーを使用します。ここに利回りデータがあります。天気を組み込みたいのです。JMPには既に契約IDというJMPと同じ2つの列が配置されているのがわかります。これが必要な列です。
ここで、もしそうでない場合は、削除する必要があるかもしれません。ここで「X」をクリックして削除します。その場合は削除する必要はありません。次に、独自の契約IDを追加できます。契約IDを共通スレッドとして識別します。次に、どの結合を行うかを決定します。これはSQLクエリで、左外部結合です。いいえ、これは不要です。両方のデータセットのデータが一致する内部結合のみを使用します。クエリを作成します。ここですべての列を追加し、クエリを実行すると、両方のテーブルを結合したデータセットが作成されます。これが収穫量データです。これがすべての気象データです。これで分析を開始できます。
次のステップは外れ値を調べることです。小規模なデータセットでは、列数が少ないため、JMPを使えば分析したいデータをすべて投入するだけで、簡単に外れ値を素早く分析できます。ここでは分布分析の例を示しましょう。個々の外れ値がどこにあるのか、あるいはどこにないのかを特定するのは非常に簡単です。ここでは明らかに外れ値があることがわかります。
しかし、ここにあるように数百もの列を持つ可能性のある大規模なデータセットでは、時間がかかりすぎます。JMPでは、分析、スクリーニング、外れ値の探索といった操作が可能です。ここでは、すべての列を追加し、外れ値を実行できます。「分位範囲外れ値」を選択してみましょう。すると、このテストに基づいて、すべての列と外れ値の数がすぐに表示されます。これらの外れ値を確認する方法は他にもたくさんありますが、これはあくまで簡単な方法です。ここから外れ値を選択し、除外したり削除したりできます。選択したセルに色を付けて、後で確認することもできます。ここには多くのオプションがあります。この方法で、大規模なデータセットでもすべての外れ値を非常に迅速に除外できます。
次のステップは特徴量エンジニアリングです。ここでは、より良い情報を与えることで、将来のモデルのパフォーマンスを向上させることができるかもしれません。これにはドメイン知識が必要になる場合もあれば、探索的データ分析の結果から、特定の列を特定の方法で組み合わせることで予測能力が向上するという直感が得られる場合もあります。例えば、この例では、工場における夏の降雨量という特徴量を作成したいとします。どのようにすれば実現できるでしょうか?
簡単に言うと、JMPに戻りましょう。データセットがここにあります。新しい列を追加します。「夏の降水量(ミリメートル)」という名前を付けましょう。「数式」を開いて、夏の降水量を見てみましょう。「統計」タブでは、簡単に平均値を算出できます。適用したい変数をドラッグして入力します。これで、「夏の情報」という特徴量が作成されました。これは先ほど作成した平方ルートデータです。特徴量エンジニアリングは、データの予測可能性を高める特徴量を組み込むことで、モデルの予測能力を向上させるために検討すべきものです。
探索的データ分析で実行できる機能が他にもいくつかあります。JMPには、応答スクリーニングと予測スクリーニングという非常に優れたツールがあります。応答スクリーニングについてはここでは取り上げません。この分析を行う方法は、予測スクリーニングと原理的に同じです。応答スクリーニングでは、Y-X分析を用いて個々の変数を調べ、個々の独立変数とそれらが従属変数にどのように影響するかを調べることができます。
予測因子スクリーニングについて、これから詳しく見ていきましょう。これは、大規模なデータセットに潜む潜在的な傾向を見つけるのに非常に役立つツールです。JMPの「分析」メニューで「スクリーニング」を選択し、「予測因子スクリーニング」を選択すると、ランダムフォレスト機械学習プロセスが用いられます。収量という反応の最も重要な予測因子は何か、そしてその理由は何かを調べたいのです。それを調べることで、場所が重要である可能性が分かります。できるだけ多くの変数、つまりすべてのデータを含めたいのです。
これらはすべてサンプルデータなので、特に期待はしないでください。今日はスピードアップのために、並列で実行することもできます。ここに入力するだけです。これを実行すると、バックグラウンドでブートストラップフォレストが実行され、収量の最も重要な予測因子がここに表示されます。この分析によると、これは文字通りサンプルデータなので注意が必要です。鵜呑みにしないでください。この場合、収量の最も重要な予測因子は場所であることがわかります。3つの異なる場所があり、最低気温は11度です。
ここから、後でモデルに含めたい重要な変数を特定し、ハイライト表示してコピーすることができます。後で使うことになるかもしれません。予測変数スクリーニングは、与えられた応答変数のデータセットの中で最も重要な予測変数を素早く特定するのに非常に役立つプラットフォームです。
特定した予測変数を使って、もう一つすぐに確認できるのが主成分分析です。ここから、収量の重要な予測変数となる可能性のある、先ほど分離した変数を追加していきます。収量もここに追加します。この分析を実行します。ラベルを削除してみましょう。ここで得られた出力を見れば、データセットに関する多くの情報がすぐに分かります。非常に複雑なデータセットでも、ここで生じている可能性のある関係性を非常に簡単に把握できるようになります。
ここには強い相関関係が見られます。これらの列、つまり土壌の最大値4と、ここにある2つ目の最大値4が非常に高い場合、全球放射も低くなることがわかります。ここで直角になっている場合、これらの変数とこれらの変数の間には相関関係がないことがわかります。
さて、モデリングプロセスについてですが、これが役立つ理由は、2つの変数(土壌温度2の最大値と気温2の最大値)が、予想通り非常に密接な正の相関関係にあることが分かるからです。この2つの変数を両方使用しても、モデルがより多くの情報を得ることはまず考えられません。その場合は、モデリングプロセスでどちらか一方を選択し、もう一方を除外することができます。この例でも同様で、モデルを改良するだけです。主成分分析も、モデルプロセスを改良するための非常に便利なツールです。
スライドに戻りましょう。モデルスクリーニングです。これで重要な変数が揃いました。どのモデルが最適かを見つけたいかもしれません。JMPに戻り、クエリ、スクリーニング、スクリーニングではなく予測モデリング、モデルスクリーニングに進みます。ここでJMPプラットフォームを開き、先ほど見つけた重要な変数を貼り付けます。そして、検討したい結果を入力できます。比較したい様々なモデルをすべて選択できます。そして、非常に重要なことですが、あらゆるシナリオにおいて、再現性を確保するためにランダムシード値を設定できます。
後でこの作業に戻りたい場合、ランダムシードを入力していないと、異なる結果になる可能性があります。一方、ここでランダムシード値(1、2、3など)を常に入力しておくと、結果は再現性があります。その後、これらの様々なオプションをすべて確認できます。JMPに検証列の作成を依頼する機能は既に組み込んでいます。様々な2次変数を追加することもできます。少し時間がかかる可能性があるので今日は実行しませんが、様々な指標に基づいて、通常はRSCとモデルR²に基づいて最もパフォーマンスの高いモデルを選択できます。プラットフォーム内には他にも選択できるオプションがあります。また、どのモデルがデータに最も適合するかを見つけるための便利なツールもあります。
次のステップは検証です。これはモデルの学習に役立ちます。データセットが過剰適合していないことを確認することが重要です。JMPでは検証列を簡単に作成できます。その方法を説明します。ここにデータセットがあります。「分析」→「予測モデリング」→「検証列の作成」に進みます。ここで、列に基づいて層別化するオプションがあります。
この例では、データセットには3つのサイトがあり、それぞれからフィールドが取得されています。ここで、サイトに基づいて層別化を行います。これは、後ほど列を分割し、ランダムに1、2、または3の値を割り当てるためです。サイトに基づいて層別化を行わないと、データセット内のサイトの数が不均等で、各サイトの行数も不均等な場合、データセットまたはモデルに偏りが生じる可能性があります。
データセットでどの列を階層化する必要があるかを考えることが重要です。「OK」をクリックします。すると、複数のデータセットを簡単に作成できます。データの分割方法については複数のオプションがあります。データの70%をトレーニング用、20%を検証用、10%をテスト用とします。
ここで調整後のレートと取得する行数を確認できます。データセットの大きさ、トレーニング、検証、テストの3つを行うのか、あるいはトレーニングと検証だけを行うのか、そしてどのような分割を行う必要があるのかを考慮することが重要です。データセットによっては、これらの値は若干異なる場合があります。
さあ、始めましょう。ご覧の通り、検証列を素早く作成しました。これにより、モデル構築時に検証列を追加できるオプションが作成されました。また、右側に表示されているように、これはブースティングツリーモデルになります。ここで注目すべき点は、モデルを最適な分割数、学習率、最小分割数など、ここに表示されているすべての要素にチューニングすることです。チューニング設計テーブルを使用することもできます。時間をかけて様々なオプションを試し、これらの変更に基づいて誤差とR²の点で最適なパフォーマンスが得られるかを確認することをお勧めします。
しかし、JMPはデータセットに基づいてこれらの推奨値を提示することが多く、それらは非常に正確で、実際に最もパフォーマンスが良い場合が多いことが分かりました。他のオプションを試してみても、この方法は非常にうまく機能します。これも考慮すべき点です。
次に「モデル評価」に進みます。先ほど言ったように、ここにR²とRMSEが表示されています。モデルの性能を評価する方法をいくつか見ていきましょう。JMPに戻ると、先ほど作成したモデルがあります。「因子プロファイリング」の「プロファイラー」に進みます。すでにオンになっています。これがモデルとプロファイラーです。列を保存して予測式を生成するのも非常に簡単です。
予測を行うために裏で実行されている式は、データセットの列に保存されます。これは既に実行されています。データセットを開いてください。ここに収量の予測値が表示されています。次に、YとXの近似値を分析します。JMPには多くの方法がありますが、これはその一つです。私たちの回答は収量でした。ここまで見ていきましょう。Xの予測値が得られました。よし、ご覧の通り、あまり良いモデルではありませんね。この線から直線を近似し、その直線の近似値に移動できます。プロファイラー。これでこのプラットフォームができて、収量の予測値を確認できます。
仮に当たったとしましょう。でも、それはやめましょう。50としましょう。「では、50と予測した場合、真の値はどれくらいになるでしょうか?」と自問自答してみましょう。49.694です。これは過剰予測です。すると、95%信頼区間の下限と上限という2つの便利な数値がすぐに得られます。これは、データセットを使ってモデルがどれだけ正確に予測しているかをリアルタイムで確認する方法の一つに過ぎません。ここでは非常に便利なツールです。
さて、モデルの展開です。プロファイラーには、特に農業生産量に役立つ非常に優れたコンポーネントがいくつか用意されています。また、将来の何かを予測したい方で、年間を通して様々な要因が影響する状況にある方は、モデルシミュレーターを使って将来のシナリオを予測することができます。ここでそのシミュレーターをご紹介します。
ここにモデルがあります。プロファイラーに進みましょう。では、これを農業にどのように活用できるでしょうか? ご覧の通り、3つの異なるサイトがあります。年間を通して異なる時期に発生する様々な変数があります。シミュレータに進みましょう。これらをすべてランダムに変更できます。数値は…ここでShiftキーを押しながら、Shiftキーを押したままShiftキーをクリック、ShiftキーではなくCtrlキーを押します。さあ、始めましょう。Ctrlキーを押しながらクリックし、ランダムに切り替えます。
ご覧の通り、ここで少し小さくするオプションがあります。モデルの実行回数をランダムに生成するオプションが、この下にあります。実行回数は10,000回です。これは任意の数値に変更できます。例えば10,000回にしてみましょう。ノイズを追加するオプションもあります。例えば3月だとします。ここにある変数の一部は3月以前のものです。3月には、評価できます。
3月の全球積算日射量は実際には60,000でした。この値を固定し、残りの値はすべてランダムにし、平均値と標準偏差を用いてモデルを10,000回反復実行します。平均値付近の値を増やし、極端な値を減らすようにします。しかし、そうすることで、表にシミュレートして巨大なデータセットを作成できます。また、非常に便利な、潜在的なシナリオを実行することもできます。ここでは、正規分布の打ち切りを適用してみましょう。データセットの特定の部分を除外します。ここでは、20未満の値と30を超える値を除外します。Enterを押します。
ご覧の通り、分布を検閲しました。これにより、これらの値が極端に到達する可能性をすべて排除しています。さらに、データを切り離し、起こりうるシナリオを検討し、シミュレーションを行うことができます。これで、起こりうるすべての結果が揃いました。表を作成し、そこから分布を分析します。収量を追加できます。これで、モデルが生成した10,000回の試行で得られた値の出力が得られました。
平均値が53、中央値が52.96となっているのが分かります。入力した値でこのケースで最も可能性の高いシナリオは約53でした。確率がきれいに表示されていますね。この列をコピーして、必要な場所に出力として貼り付け、モデルへの入力値を変えた様々な結果をグラフ化することができます。これは、様々な夏の天候シナリオで将来の収穫量を予測し、あらゆるシナリオを分析に含めるのに非常に役立ちます。では、Excelに戻りましょう。
まとめると、JMPは予測モデルを構築できるオールインワンプラットフォームです。様々なビジネスケースにおいて、農業分野における知見をいくつかご紹介しました。このプロセス全体は、将来の予測を試みるあらゆるユースケースに応用可能です。膨大なデータセットを保有しながらも、それを十分に活用できていない企業でも、JMPを活用することで、それらのデータセットを統合・分析し、そこに潜む潜在的な傾向を明らかにし、将来のデータに基づいた意思決定を可能にします。しかし、本当に重要なのは、優れたモデルを作成するには、十分な量の高品質なデータが必要であるということです。少しでもお役に立てれば幸いです。ご質問があれば、お気軽にお問い合わせください。以上です。ありがとうございました。