温湿度センサーのログと、黄色粘着板の誘殺数(粘着板に捕獲された成虫数)の調査記録がそろっているのに、散布図を描くと相関がほとんど見えない。このような状況は、現場のデータ活用で珍しくありません。そこで「環境データは害虫の発生予測には使えない」と結論づけたくなるのも、自然な反応です。
この慎重な姿勢には価値があります。一方で、生の気温と同じ週の誘殺数を直接比べる方法は、害虫の発育の仕組みとずれている場合があります。発育には適温域があり、成虫が増えるまでには時間がかかり、温度の影響は積み重なって現れるためです。
最初に決めたいのは「相関が高いか低いか」ではなく、「環境データを発育の仕組みに沿って加工したうえで、単純な方法より予測が良くなるかを、時間順を守って確かめること」です。
本記事では、温度とコナジラミ個体数(黄色粘着板の週次誘殺数を想定)を例に、相関が弱く見える理由、特徴量への加工、予測変数としての評価手順を整理します。使用するデータとコードはすべて説明用の架空・疑似のものです。
生の温湿度と誘殺数の相関が弱いのは、なぜなのか
相関係数とは、2つの値がどの程度直線的に連動するかを表す指標です。この値が低いことは、関係がないことを意味しません。次の4点により、関係が見えにくくなる場合があります。
非線形な応答:発育には適温域がある
害虫の発育速度は、一般に温度に対して一山型の応答を示します。発育零点(それ以下では発育が進まないと仮定する下限温度)を下回ると発育は進まず、適温域で速くなり、高温側では再び抑制される場合があります。低温期にも高温期にも誘殺数が少ないと、直線的な相関は打ち消し合って弱くなります。
温度と発育速度の関係(概念図)
温度が低い側から高い側へ、3つの領域に分けて示しています
概念図であり、特定の種の温度値や発育速度の数値を示すものではありません。
時間遅れ:気温の変化は数週間後に現れる
卵から成虫になるまでには一定の期間が必要なため、気温が上がった週に誘殺数がすぐ増えるとは限りません。同じ週どうしを比べると、ずれた関係を見ていることになります。この遅れをラグ(lag:時間遅れ)と呼びます。
気温の変化と誘殺数の反応のずれ(概念図)
概念図であり、遅れの週数は種・温度・栽培条件によって異なります。
積算効果:温度は積み重なって影響する
発育は、ある日の気温だけでなく、一定期間に受けた温度の総量に左右されると考えられます。この総量を有効積算温度と呼びます。簡易法では、日平均気温から発育零点を差し引き、0未満は0として日ごとに合計します。最高・最低気温から積算量を推定する方法も提案されています(Baskerville and Emin, 1969)。
交絡と測定の問題:温度以外の要因が混ざる
- 防除(薬剤散布など)で誘殺数が下がると、環境要因の効果を誤って評価する場合があります。
- 温度と湿度は連動して動くため、どちらの影響かを分けにくくなります。
- 施設栽培では、外気温ではなくハウス内温度を使うべき場合があります。
- 誘殺数は個体数そのものではなく、成虫の活動量の影響も受ける指標です。
ただし、これは相関の確認が無意味という意味ではありません。相関は出発点として有用であり、加工前後の比較にも使えます。
疑似データで見る、特徴量への加工の考え方
次の表は、加工の考え方を示すための5週分の疑似データです。発育零点は説明用に10℃と仮置きし、有効積算温度は週平均気温から簡易計算しています。
| 週 | 週平均気温(℃) | 週平均湿度(%) | 有効積算温度・累積(日度) | 2週前の平均気温(℃) | 誘殺数(頭) | 防除 |
|---|---|---|---|---|---|---|
| 第1週 | 14 | 78 | 28 | ― | 12 | なし |
| 第2週 | 16 | 76 | 70 | ― | 11 | なし |
| 第3週 | 18 | 74 | 126 | 14 | 15 | なし |
| 第4週 | 21 | 72 | 203 | 16 | 24 | なし |
| 第5週 | 24 | 70 | 301 | 18 | 31 | あり |
上の数値はすべて説明用の架空値であり、実データで同じ傾向になるとは限りません。この表では、誘殺数の増加が気温の上昇より遅れて現れ、第5週には防除の記録が加わっています。防除日を記録しないと、誘殺数の変化を環境要因によるものと誤解するおそれがあります。
加工の代表的な考え方は次の4つです。
- 有効積算温度:発育零点を差し引いて期間内で合計する
- ラグ特徴量:過去の気温を1〜4週ずらして並べる
- 移動平均:直近数週の平均を使う
- 適温域の滞在日数:適温域とみなす範囲に入った日数を数える
重要なのは、予測する時点で既に分かっている過去の情報だけで作ることです。未来の気温や、評価期間の誘殺数が特徴量に混ざると、実際より良い結果に見えます。これを未来情報の混入(データリーケージ)と呼びます。どの組み合わせや範囲が適切かは、対象の種、作型、データごとに検討が必要です。
まず手元のデータで試せる確認作業として、気温を0〜4週ずらした場合の、誘殺数との相関を横に並べてみてください。ずらす週数で相関が大きく変わるなら、時間遅れを考慮する意味があります。
環境データを予測変数として評価する手順
環境データを予測変数として評価する流れ
- データ確認調査条件、欠測、防除履歴を確認する
- 特徴量設計過去の情報だけで積算やラグを作る
- ベースライン設定前週の誘殺数をそのまま予測値とする
- 時系列検証過去で学習し、後の期間で評価する
- 解釈変数の追加・除外で寄与を比べる
- 現場判断現場の観察と合わせて補助情報として使う
概念図であり、実際の手順は目的やデータに応じて調整します。
Step 1:データを確認する
調査頻度や方法が一貫しているか、センサーの設置位置、欠測、防除の実施日を確認します。ここが曖昧なまま進めると、後段の評価結果を解釈できなくなります。
Step 2:ベースラインを置く
ベースラインとは、比較の基準となる単純な予測方法です。ここでは、前週の誘殺数をそのまま今週の予測値とします。単純な方法ですが、これより誤差が小さくならなければ、環境データを加える意味は限定的です(Hyndman and Athanasopoulos, 2021)。
Step 3:時系列分割で検証する
データをランダムに分けると、近い週のデータが学習側と評価側に混在し、実際より良く見える場合があります。過去の期間で学習し、それより後の期間で評価する時系列分割が基本です(Hyndman and Athanasopoulos, 2021)。時系列データへの交差検証の適用にも注意点があり、検討が行われています(Bergmeir and Benítez, 2012)。
Step 4:3つの方法を同じ条件で比べる
| 比較対象 | 予測の考え方 | 確認する点 |
|---|---|---|
| ベースライン | 前週の誘殺数をそのまま予測値とする | 誤差の水準(以降の比較の基準) |
| 生の気温のみ | 気温をそのまま入力する | ベースラインより誤差が小さいか |
| 加工した特徴量 | 積算・ラグ・適温域滞在などに加工して入力する | 生の気温より誤差が小さいか。複数の評価期間で安定しているか |
この表は評価の枠組みを示すもので、特定の結果を示すものではありません。誤差の指標(平均絶対誤差など)と分割方法は、3つで揃えてください。
Step 5:寄与を確認し、現場判断につなぐ
変数を1つ追加・除外して誤差の変化を見ると、どの加工が予測に寄与しているかを把握できます。モデルは、まず線形モデルで確認し、必要に応じて非線形も扱えるモデルでも比べる程度で十分です。結果は現場の観察と照らして解釈します。
もう1つの確認作業として、最初にベースラインの誤差だけを計算しておくことをお勧めします。以降の改善の有無を判断する基準になります。
サンプルコード(pandas・NumPy)
以下は、疑似データの生成から3つの方法の比較までを示す短い例です。時系列分割と線形モデルには scikit-learn を使用しています。疑似データは実際の生態を再現したものではないため、結果の傾向は参考にとどめ、自分のデータに置き換えて確認してください。
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import TimeSeriesSplit
# 注意: すべて疑似データです。実際の生態を再現したものではありません。
rng = np.random.default_rng(42)
T_BASE = 10.0 # 発育零点(説明用の仮の値。種・系統・文献で異なります)
# 1. 疑似データの生成(日次の気温・湿度、週次の誘殺数)
days = pd.date_range("2024-01-01", periods=7 * 52, freq="D")
t = np.arange(len(days))
temp = 17 + 9 * np.sin(2 * np.pi * (t - 100) / 364) + rng.normal(0, 1.5, len(days))
humid = 75 - 0.8 * (temp - 17) + rng.normal(0, 4, len(days))
daily = pd.DataFrame({"temp": temp, "humid": humid}, index=days)
weekly = daily.resample("W").mean()
response = np.exp(-(((weekly["temp"] - 25) / 7) ** 2)) # 一山型の応答(説明用)
lam = 3 + 40 * response.shift(2).bfill() # 2週遅れで反映される設定
weekly["catch"] = rng.poisson(lam)
# 2. 有効積算温度(日平均気温から発育零点を引き、0未満は0として合計)
daily["gdd"] = (daily["temp"] - T_BASE).clip(lower=0)
weekly["gdd_week"] = daily["gdd"].resample("W").sum()
# 適温域の範囲(22〜28度)も説明用の仮の値
weekly["opt_days"] = daily["temp"].between(22, 28).astype(int).resample("W").sum()
# 3. 特徴量(予測対象週に対し、前週以前の情報だけで作る)
# shift(正の値)は過去方向。負のshiftや center=True は未来情報が混ざるため使わない
feat = pd.DataFrame(index=weekly.index)
feat["prev_catch"] = weekly["catch"].shift(1) # ベースライン用
feat["temp_raw"] = weekly["temp"].shift(1) # 生の気温(前週)
feat["temp_lag2"] = weekly["temp"].shift(2) # ラグ特徴量
feat["temp_ma3"] = weekly["temp"].rolling(3).mean().shift(1) # 移動平均(過去のみ)
feat["gdd_4w"] = weekly["gdd_week"].rolling(4).sum().shift(1) # 直近4週の積算
feat["opt_days_lag2"] = weekly["opt_days"].shift(2)
y = weekly["catch"]
valid = feat.dropna().index
feat, y = feat.loc[valid], y.loc[valid]
# 4. 生の気温と加工特徴量の相関を比較
print(pd.concat([y, feat.drop(columns="prev_catch")], axis=1).corr()["catch"].round(2))
# 5. 時系列分割で比較(過去で学習し、後の期間で評価)
def evaluate(cols=None):
errors = []
for tr, te in TimeSeriesSplit(n_splits=4).split(feat):
if cols is None: # ベースライン: 前週の誘殺数をそのまま予測値とする
pred = feat["prev_catch"].iloc[te].to_numpy()
else: # 線形モデル(非線形も扱えるモデルに差し替え可能)
model = LinearRegression().fit(feat[cols].iloc[tr], y.iloc[tr])
pred = model.predict(feat[cols].iloc[te])
errors.append(np.abs(pred - y.iloc[te].to_numpy()).mean())
return float(np.mean(errors))
print("ベースライン :", evaluate())
print("生の気温のみ :", evaluate(["temp_raw"]))
print("加工した特徴量:", evaluate(["temp_lag2", "temp_ma3", "gdd_4w", "opt_days_lag2"]))Python実データで使う場合は、防除実施日の列を加え、欠測の扱いと調査日の不揃いへの対応を先に決めてください。
実データで手順どおりにいかない場面
ここまでの手順は、データが整っている前提で説明しました。実データでは、次のような理由で、そのまま評価できないことが多くあります。
- 調査頻度や粘着板の交換間隔が、途中で変わっている
- 防除の実施日が記録されておらず、誘殺数の減少の理由を切り分けられない
- センサーの欠測や設置位置の問題で、温度が栽培環境を代表していない
- 作型や年次による違いに対して、データ期間が短い
こうした場合は、予測モデルを作る前に、評価設計やデータ収集設計から見直すほうが近道になることがあります。害虫モニタリングデータと環境データを組み合わせて判断を支援するという考え方は、施設衛生の分野でも共通しています。
結果を読むときの限界と注意点
- 本記事の例は架空データによる説明であり、実データで同じ結果になるとは限りません。
- 発育零点や必要な積算温度は、種(タバココナジラミ、オンシツコナジラミなど)や系統、文献によって異なります。実務では文献や公的機関の情報で確認してください。
- 積算温度が一定値に達すれば必ず発生する、というような決定論的な見方はできません。
- 温湿度だけで高精度に予測できるとは限りません。品種、栽培管理、周辺環境なども影響します。
評価の結果、環境データの寄与が小さい場合もあります。その場合は「環境データは使えない」と断じるのではなく、調査方法の見直しや、データ追加の検討へ進む選択肢があります。逆に改善が見られても、予測は現場の観察と判断を補助する材料として扱うことが前提です。
環境データを評価する前のチェックリスト
| 確認項目 | 確認する内容 |
|---|---|
| 調査頻度・方法の一貫性 | 調査間隔、粘着板の種類・設置数・交換間隔が期間を通じて同じか |
| センサー設置位置 | 温湿度計が栽培環境を代表する位置にあるか |
| 温度の種類 | 外気温かハウス内温度か。目的に合っているか |
| 欠測の扱い | 欠測の量と、補完・除外の方針が決まっているか |
| 防除履歴の記録 | 防除の実施日が、誘殺数と対応づけて残っているか |
| 作型の違い | 作型・品種・栽培時期の違いを区別できるか |
| データ期間の長さ | 季節変動を複数回含む期間があるか |
| 発育零点の根拠 | 対象種に関する文献や公的情報で確認したか |
| 未来情報の混入 | 特徴量が予測時点で既知の情報だけで作られているか |
| ベースラインとの比較 | 前週の誘殺数による予測と、時系列分割で比較したか |
まとめ
生の温湿度と害虫数の単純相関が弱いことだけで、環境データを予測に使えないと判断するのは早計です。発育には適温域があり、反応には時間遅れがあり、温度の影響は積算して現れるためです。
次に確認したいのは、次の3点です。
- 有効積算温度・ラグ・適温域の滞在時間などに加工しているか
- ベースラインと時系列分割で比較しているか
- 防除履歴や調査条件を踏まえて、結果を現場の観察と照らして解釈しているか
完璧なデータがそろってから始める必要はありません。小さな範囲で確認し、寄与が見えない場合はデータの取り方を見直す、という段階的な進め方もあります。
データの評価設計から相談したい場合
「手元の温湿度データとトラップ調査データで予測に使えるか検証したい」「どのデータをどの頻度で取ればよいか整理したい」という段階からでも、ご相談いただけます。
参考文献
- Baskerville and Emin. 1969. Rapid Estimation of Heat Accumulation from Maximum and Minimum Temperatures. Ecology. Vol. 50. Issue 3. pp. 514-517. https://doi.org/10.2307/1934666
- Bergmeir and Benítez. 2012. On the use of cross-validation for time series predictor evaluation. Information Sciences. Vol. 191. pp. 192-213. https://doi.org/10.1016/j.ins.2011.12.028
- Hyndman and Athanasopoulos. 2021. Forecasting: Principles and Practice (3rd ed.). OTexts. https://otexts.com/fpp3/