目的

油田およびガス田の生産性を最適化するための最も重要な要素の 1 つに、過去の生産データの解析があります。減衰曲線解析 (DCA) などの堅牢性の高い生産データ解析手法は、生産エンジニアが減衰率、石油およびガスの平均生産率、累積生産量などの坑井生産性関連指標を評価するのに役立ちます。さらに重要なのは、これらの手法により、石油およびガスの生産量を予測して、アセットの現在の財務実績や長期的な存続可能性を正確に評価できることです。

生産データ解析手法では、坑井性能パラメーターに基づく数学モデルを使用し、回帰分析を介して過去の石油およびガスの生産データに当てはめます。たとえば、DCA では指数関数的な減衰を示す数学関数を使用します。Arps 方程式は、石油およびガス業界で最も一般的で、広く使用されている DCA 手法であると言えます。ほとんどの DCA モデルと同様に、Arps には、レート過渡解析 (RTA) などの複雑な手法に比べて、重要な利点がいくつかあります。1 つ目は、DCA は計算コストが低く、実装が簡単なことです。2 つ目は、DCA はパラメーター数の少なさを特徴とし、回帰結果の解釈が容易なことです。3 つ目は、DCA では、単一または複数の坑井からの高密度の過去の生産記録など、大規模なデータセットを処理できることです。ただし、他のモデルと同様に、データ解析、生産予測、石油経済評価において物理的に有効な DCA モデルを得るには、入力データの品質が重要です。

このホワイトペーパーでは、MATLAB® を使用して、石油およびガスの生産データについて DCA によるデータ解析ワークフローを開発し、デプロイする方法について説明します。過去の生産データセットをフォーマットして前処理する方法、カスタム回帰モデルを作成する方法、生産予測を生成する方法、石油経済解析を行う方法について説明します。主な目的は、MATLAB を使用することで、シンプルでありながら堅牢性の高いソフトウェア開発手法に沿って、ワークフローに含まれる複雑さを簡素化し、扱いやすくする仕組みを示すことです。デモンストレーションを目的として、テキサス州鉄道委員会 (TRRC) の Web サイトで公開されている過去の石油およびガスの生産レポートを使用します。

セクション

生産データ解析 Web アプリ

ここからは、MATLAB で石油およびガスの生産データ解析を行うためのワークフローの主な手順と、より信頼性が高くメンテナンスしやすい石油およびガス生産用ソフトウェア アプリケーションの設計とカスタマイズに役立つソフトウェア開発と実装に関するベストプラクティスを紹介します。

アプリはオンラインでデプロイされていますが、エンドユーザーは他の従来のデスクトップ アプリケーションと同じように Web アプリを操作できます。図 1 は、アプリの [インポート] タブで、過去の生産記録をドラッグ アンド ドロップする様子を示しています。データセットが追加されると、アプリはさまざまなデータ前処理操作を実行し、結果として得られるデータを対応するグラフにプロットします。データのインポートとデータの前処理に関連するプロセスについては、「データのインポート」セクションと「データの前処理」セクションでそれぞれ詳しく説明します。

外部ファイルからデータを読み込む方法を示す、坑井生産データ解析アプリの 2 つのスクリーンショット。

図 1. MATLAB で作成された坑井生産データ解析アプリの [インポート] タブ。​

データをインポートすると、DCA 回帰分析を実行できます。図 2 は、アプリの [回帰] タブを示しています。このタブでは、回帰設定を調整し、モデルを当てはめるために、特定の流体相 (石油またはガス) の平均生産率あるいは累積量生産データを使用するかを選択します。なお、アプリでは回帰範囲の開始点と終了点を選択できるため、分析の柔軟性が高くなります。関心のある特定の期間の DCA 回帰を作成すると、坑井介入操作の前後などにおける生産挙動を評価できます。すべてのパラメーターを定義したら、基礎となる最適化アルゴリズムの [データの当てはめ] をクリックして、データセットに最も当てはまる DCA パラメーターのセットを推定できます。こうすると、アプリでは、使用されたパラメーターの概要と、各流体相の決定係数 (R2) が表示されます。DCA プロセスの詳細については、「減衰曲線解析」セクションを参照してください。

元のデータを使用して DCA 回帰モデルを実行する方法を示す、坑井生産データ解析アプリの 2 つのスクリーンショット。

図 2. [回帰] タブで自動 DCA 回帰を実行します。

DCA モデルに基づいて石油およびガスの生産量予測を作成するには、何年先まで予測するかを定義するだけです。アプリが石油およびガスの流体相の平均生産率と総生産量をそれぞれ計算します。図 3 に示すように、アプリでは、スライダーまたは数値テキストフィールドを使用して、予測期間を年単位で指定できます。予測期間の範囲設定を変更すると、平均生産率グラフと累積生産量グラフが自動的に更新されます。

[予測] タブで将来の石油およびガスの生産率と累積生産量を示す坑井生産データ解析アプリのスクリーンショット。

図 3. [予測] タブには、過去の生産データと予測された石油およびガスの生産率および累積生産量が表示されています。​

生産予測データに基づいた石油経済解析の実行が、この生産データ解析ワークフローの最終段階です。石油経済評価は、アセット管理者が、産地規模の分析から個々の坑井分析に至るまで、あらゆる段階で十分な情報に基づく意思決定を行うために使用されています。アプリで新しい予測を作成すると、データはすぐに [経済] タブに移動し、そこで税金、資本支出 (CAPEX)、操業費 (OPEX)、石油およびガス価格などのパラメーターを変更できます。次にアプリは、正味現在価値 (NPV)、損益分岐点、景気後退点 (該当する場合)、内部収益率、投資収益率を内部で計算して、グラフ上の NPV 曲線を自動的に更新します。図 4 は、NPV 曲線の例を示しています。この例では、曲線は負から正に転じ (損益分岐点をまたぐ)、最大値 (最大 NPV) を達成し、その後減少し始め、その時点以降、坑井を操業するにはコストがかかりすぎることを示唆しています。アプリは、予測される最高の NPV と実現予定日も表示します。これらの実装の詳細については、「経済解析」セクションで説明します。

プロジェクトの推定累積キャッシュフローを示す坑井生産データ解析アプリのスクリーンショット。

図 4. NPV 曲線を示す [経済分析] タブ。

石油およびガスの生産データ解析ワークフローを実行するために開発された Web アプリで使用されている、MATLAB のソフトウェア開発機能をいくつか確認してみましょう。

セクション

ソフトウェア アーキテクチャ

前のセクションで、あるコンポーネントの入力が別のコンポーネントの出力に依存している、アプリのコンポーネントの線形関係に気付いたと思います。たとえば、DCA のタブは [インポート] タブが提供するデータに依存し、同時にこのデータはユーザーが提供するデータセットに依存していることに注目してください。[経済] タブは [予測] タブで提供される生産予測に依存し、[予測] タブは DCA のタブで提供される DCA モデルに依存しています。これは、パイプとフィルターのソフトウェア アーキテクチャ パターンの典型的な例です。このよく知られたソフトウェア アーキテクチャを考慮して、本アプリのアプリケーション ロジックはその設計パターンの概念に基づいています。表 1 は、コンポーネントまたはフィルターと、それらの役割、入力、出力について説明しています。

表 1. ソフトウェア コンポーネントと役割。
コンポーネント 責任 入力 出力
データのインポート
  • 外部データセットの生産履歴の記録を解析して MATLAB に取り込む
  • データとメタデータの分割を処理する
  • 平均生産率、流動時間、累積生産量などの従属変数を計算する
  • TRRC テンプレートを使用した石油およびガスの生産データセット
  • 入力データセットからのの数値データを含む table
データの前処理
  • 生の生産データを含む table を読み取る
  • 内挿法を使用して、欠損エントリや無効なエントリ (NaNinf など) を削除して置換する
  • 内挿法を使用して外れ値を検出して削除し、置換する
  • の数値データを含む table
  • クリーンな数値データを含む table
減衰曲線解析
  • 平均生産率と累積生産量について Arps DCA モデルの数学的回帰を実装する
  • 回帰の対象とする目的の期間を選択できる
  • クリーンな数値データを含む table
  • 石油相の回帰パラメーターを含む構造体
  • ガス相の回帰パラメーターを含む構造体
生産予測
  • 石油相とガス相の両方の生産量予測を生成する
  • 予測期間を年単位で定義できる
  • 石油相の DCA 回帰パラメーター
  • ガス相の DCA 回帰パラメーター
  • 石油およびガスの生産量予測を含む table
経済解析
  • 石油相とガス相の生産量予測に基づいて経済性を計算する
  • 石油およびガスの価格、減価償却、税金、CAPEX と OPEX などの経済解析指標を定義できる
  • 石油およびガスの生産量予測を含む table
  • 経済性パラメーターの値を含む構造体
  • 経済解析の結果を含む構造体

これらのコンポーネントとは別に、Analysis と Results という 2 つの包括的なモジュールを構築しました。これらのアセンブリ要素は、プロセスの特定の部分の主な役割を共同でカバーします。図 5 は、現在説明しているソフトウェア アーキテクチャを示しています。

生産データ解析ワークフローの 5 つのステップ (データのインポート、前処理、回帰、予測、経済解析) を示すワークフロー図。

図 5. 生産データ解析のソフトウェア アーキテクチャ。​

パイプとフィルターのアーキテクチャにはいくつかの利点があり、たとえば、複雑なワークフローを独立した協調的なコンポーネントに分割して、ソフトウェアのデバッグと保守を容易にすることができます。さらに、新しいコンポーネントを追加することでプログラムの機能を拡張できます。ただし、新しいコンポーネントには、パイプ、より正式にはソフトウェアコネクタと互換性のあるアプリケーション プログラミング インターフェイス (API) が必要です。たとえば、Results サブシステムを拡張する方法の 1 つとして、MATLAB Report Generator™ を使用して、生産エンジニアおよびアセット管理者向けに特別に設計されたレポートを生成する Report コンポーネントを追加する方法があります。

セクション

サンプル生産データ

TRRC の Public GIS Viewer ツールを使用して、南テキサス州にあるイーグル フォード シェールのブラックオイル領域全体からランダムに選択した 200 の坑井で形成される群を作成しました。次に、Mapping Toolbox™ を使用して、累積石油生産量のバブルプロットを作成しました。

TRRC の Public GIS Viewer ツールを使用して、南テキサス州にあるイーグル フォード シェールのブラックオイル領域全体からランダムに選択した 200 の坑井で形成される群を作成しました。次に、Mapping Toolbox を使用して、図 6 に示す累積石油生産量のバブルプロットを作成しました。

テキサス州のイーグルフォードの油井の位置を示す地図。坑井は色分けされたバブルで表示され、2024 年 1 月時点の累積生産量を示しています。

図 6. 米国南テキサス州のイーグルフォード シェールにある 200 を超える油井群の位置。​

イーグルフォード層の下部から石油を生産している Karnes 郡のこの坑井群からの平均日量が、図 7 に示されています。石油日量の減少率に注目すると、これはべき乗則の減少と非常によく似ており、まさに Arps DCA で説明しようとしているものです。

テキサス州のイーグルフォードの下部にある複数の坑井の数年間にわたる平均日量をプロットしたグラフ。

図 7. 米国南テキサス州のイーグルフォード層の下部にある 200 を超える坑井の平均石油日量。​

この記事で取り上げる生産データ解析方法では、前述の坑井群全体から 1 つの坑井をランダムに選択しました。匿名性を保つため、この記事ではこの坑井を単に "サンプル坑井" と呼びます。オペレーター、場所などの坑井メタデータは公開しません。

セクション

生産データ解析ワークフロー

前のセクションでは、Web アプリで使用される生産データ解析ワークフローの基礎を説明しました。このセクションでは、「ソフトウェア アーキテクチャ」セクションで説明したコンポーネントのソフトウェア実装に焦点を当て、MATLAB を使用して各コンポーネントに必要な機能を構築する方法を重点的に説明します。コンピューター プログラミングの基礎知識があることを前提として、このホワイトペーパーには、さらに詳しい手順が記載された追加リソースへのリンクが含まれています。

ワークフローは 5 つの異なるサブセクションに分かれています。「データのインポート」では、TRRC データセットを MATLAB にインポートするプロセスと、この特定のタイプのデータ構造に関連するいくつかの課題について説明します。「データの前処理」では、データのクリーニングと外れ値検出を目的とした MATLAB で使用できる各種オプションについて説明し、このプロセスを自動化する方法について考察します。Arps DCA などの MATLAB のカスタム回帰モデルの定義、および生産予測への応用については、サブセクション「減衰曲線解析」および「生産予測」でそれぞれ取り上げています。最後に、ユーザー定義の経済指標を使用して、石油とガスの生産予測から財務に関する洞察を得る方法について、「経済解析」で説明します。

データのインポート

MATLAB の堅牢なデータインポート機能により、EXCEL® スプレッドシート、カンマ区切り値 (CSV) ファイル、画像ファイル、音声や動画ファイルなどの代表的なデータタイプ、その他多くのデータ型を簡単に扱うことができます。ここではローカルに保存されたデータに焦点を当てますが、MATLAB は Amazon® Web Services、Microsoft® Azure®、Google Cloud Platform™ (「クラウドでの MATLAB および Simulink の使用」参照) などのクラウドサービス、また Database Toolbox™ 経由でリレーショナル データベースおよび NoSQL データベースへのインターフェイスを搭載している点を強調しておきます。

サンプル坑井データセットの準備

サンプル坑井の石油およびガスの生産記録は、TRRC テンプレートの形式に従ったローカル CSV ファイルに保存されます。CSV ファイルの表は、MATLAB に直接読み込み、インポートできますが、この特殊なテンプレートの場合はいくつか問題があります。まず、数値データ (石油やガスの純産出量など) とメタデータ (オペレーター名、場所など) が混在しています。次に、いくつかのデータポイントが欠落しており、NO RPT のラベルが付けられています。最後に、日時の形式が特定の報告が記録された正確な日付を示していないため、通常のものとは若干異なっています。サンプル坑井のデータセットのスクリーンショットを図 8 に示します。

サンプルの生産履歴ログの一部分を示す Excel スクリーンショット。

図 8. サンプル坑井の生産履歴が表示されているインポートツール。

これらの問題があるにもかかわらず、MATLAB はこのデータセットをインポートツール経由で処理することができます。このグラフィカル アプリケーションでは、各列に対応するデータ型を指定し、目的のデータ範囲を定義し、欠損データエントリのある行を含めるかどうかを選択することにより、インポート パラメーターをさらにカスタマイズできます。

ここでは、まず適切なデータ型として Number を選択し、表中の石油とガスの生産データをハイライトしました。次に、MATLAB が処理レポートの日付を正しく読み取って処理できるように、列 1 にカスタムの datetime 型を定義しました。その後、列 1、2、4 をそれぞれ reportDatesnetOilnetGas に変更しました。

カスタムインポート機能の作成

サンプル坑井のデータセットの準備とこれらを正しくインポートするために必要な手順を行った後で、MATLAB のコード生成機能を使用して関数 wellDataParser を作成しました。この関数は、前述のデータ準備手順を自動的に行います。wellDataParser 関数を使用すると、CSV ファイルの TRRC データセットを MATLAB コマンドラインから直接インポートできます。この関数は、生データを含む table を返します。この生データは、「ソフトウェア アーキテクチャ」セクションで説明されているように、この後の解析で使用できます。

wellDataParser はホワイトボックス関数として作成されているため、変更してより多くの機能に対応させることが可能です。たとえば、指定のレポートの日付の最終日を計算し、reportDates のすべてのレポートの日付を図 9 のようにリファクタリングしました。

WellDataParser 関数でインポートされたデータを示す 2 つのコマンドウィンドウのスクリーンショット。

図 9. wellDataParser から出力された table。

高度なヒント:データストアと Parallel Computing Toolbox™ を併用して、数百または数千の TRRC データセットを同時にインポートできます。

データの前処理

最後のセクションで確認したように、データセットには InfNan などの無効な要素または欠損要素が含まれる場合があります。これらの要素は、データセットに MATLAB の組み込み関数 rmmissing を適用することによって容易に除去できます。ただし、データには目視の検査では特定が困難な異常値が含まれていることもあります。

生産データセットのクリーニング

幸い、矛盾するデータはデータ クリーナー アプリを使用してクリーニングできます。このアプリはデータを探して視覚化し、外れ値検出のためのルールを定義します。図 10 はデータ クリーナー アプリのスナップショットで、サンプル坑井の netOilnetGas を視覚解析したものです。データコレクションをパージするために必要なアクションを定義した後、データ クリーナー アプリを使用してカスタム関数 wellDataCleaner を作成しました。この関数には、アプリ内で実行した前処理アクションが含まれています。

データのクリーニング手続きが表示されたデータ クリーナー アプリのスクリーンショット。

図 10. データ クリーナー アプリ。

データ拡張

この時点でデータセットはクリーンな状態です。次のステップでは、DCA 回帰分析を実行するための変数、つまり稼働時間 (流動時間)、石油とガスの平均日量、石油とガスの累積生産量を定義します。wellDataCleaner はホワイトボックス関数であるため、ソフトウェア アーキテクチャ プランの要件に適合するよう、欠落している特徴 flowTimeoilRategasRatecumOilcumGas を計算し、それらを出力 table に挿入するために必要なコードを追加しました。図 11 は、サンプル坑井の前処理済みの table です。

クリーニングと拡張が行われたデータが表示されたコマンドウィンドウのスクリーンショット。

図 11. クリーニングと拡張が行われた後のサンプル坑井の産出量

ソフトウェア アーキテクチャの進捗

生産データ解析パイプラインの開発を図 12 に示しています。MATLAB のカスタム関数 wellDataParser および wellDataCleaner は、データのインポートとデータの前処理におけるソフトウェア コンポーネントを示します。このイラストにある青色の矢印は、生の table を表しています。これは最初の関数の結果であり、後の関数で入力として使用されます。MATLAB では、これら 2 つの関係は次のようになります。

>> well = wellDataParser("sampleWellData.csv"); 

>> well = wellDataCleaner(well); 

上のコードは、データインポートとデータ前処理のコンポーネントをつなぐパイプを明確に表しています。wellDataCleaner が、新しいオブジェクトを返すのではなく、既にある well オブジェクトを変更することにより、メモリを効果的に使用している点に注目してください。

データインポートとデータ前処理のコンポーネントが実行されている様子を表す図。

図 12. データインポートとデータ前処理のコンポーネントは、MATLAB で生成された関数を使用してモデル化され、データの取り込みとクリーニングが自動化されます。

高度なヒント:MATLAB では、データ クリーナー アプリの使用例を多数ご用意しています。詳細については、MATLAB ドキュメンテーションをご覧ください。

減衰曲線解析

多くの実務者が、Arps 方程式を石油とガスの生産データ解析における DCA の標準モデルであると考えています。最も広く利用されている方程式は、生産率ベースの双曲線的減衰です。これは、平均日量の時間の経過にともなう減衰を、初期生産率 \( q_{i} \) (量/日)、減衰率 \( D \) (1/日)、\( b \) 係数の 3 つの回帰パラメーターからなる関数で表した、基準時間 \( t_{i} \) (日数) に関するものです。この方程式は、次のように定義されています。

\( q(t; t_{i}) = \frac{q_{i}}{[1 \ + \ bD(t \ - \ t_{i})]^{\frac{1}{b}}} \)

方程式 1.

\( q(t; t_{i}) \) は、\( t > t_{i} \) の時点での生産率を示します。累積生産量に関係する 2 つ目の方程式は、方程式 1 を基準時間 \( t_{i} \) から時間 \(t\) > \( t_{i} \) へ経時的に積分することで得られます。その結果、生産量ベースの Arps 方程式は次のように定義できます。

\( Q(t; t_{i}) = Q_{i} + \frac{q_{i}^{b}}{D(b \ - \ 1)}(q^{1-b}(t; t_{i}) - q_{i}^{1-b}) \)

方程式 2.

\( Q(t;t_{i}) \) は、\( t>t_{i} \) の時点での累積生産量を示します。方程式 2 には、パラメーターとして開始累積生産量 \( Q(t_{i}) ≡ Q_{i} \) がある点に注目してください。このパラメーターは、坑井の生産記録から取得するか、追加の回帰パラメーターとして定義できます。表 2 は、DCA 解析に採用した単位をまとめたものです。

[1 bbl = 0.158987 m3 = 5.61458 ft3]
表 2. 生産データ解析の単位系
流体 生産率 累積生産量
石油

バレル/日 (bbl/日)

バレル (bbl)

ガス

100 万標準立方フィート/日 (MMscf/日)

100 万標準立方フィート (MMscf)

DCA 回帰モデルの作成

方程式 1 および 2 に基づき、Curve Fitting Toolbox™ の曲線フィッターを使用して流体相ごとにカスタムの DCA 回帰モデルを作成しました。ここで、table well がワークスペースにあると想定して、石油の平均日量について生産率ベースの DCA 回帰を開発する際に使用した 4 つのステージについて説明します。

  • 手順 1: well をインポートし、x と y のデータを well.flowTimewell.oilRate にそれぞれ代入します。石油の生産量が 120 日のあたりでピークに達し、減少し始めるため、この時点より前にデータを追加してはならない点に注意してください。
  • 手順 2: [カスタム式] オプションを使用して、生産率ベースの DCA モデルを作成します。MATLAB によって、正しい方法で回帰が試行されますが、1 つ以上の回帰パラメーターがゼロに近すぎる、マイナスの値になる、大きすぎるなどの理由で発生する収束の問題により失敗する可能性が高いです。各パラメーターに物理的に意味のある境界値を定義して、この問題を解決します。各パラメーターの最初の推測を適切に行うことで、アルゴリズムの収束も速くなります。
  • 手順 3: 演算の要約統計量をチェックし、結果として得られる回帰パラメーターが妥当なものであり、指定範囲内にあることを確認します。値と 95% 信頼限界が MATLAB に表示されます。結果として得られる誤差の平方和 (R2)、および平方根平均二乗誤差 (RMSE) から、回帰の適合度をより深く理解することができます。MATLAB では、この要約統計量を適合度 (gof) と呼びます。
  • 手順 4: [エクスポート] オプションを使用して、結果として得られる回帰モデルと gof 統計を含む関数を生成します。

残りの DCA 回帰を作成するために、同じ手順を繰り返しました。その結果、石油とガスの各相について、方程式 1 および 2 に基づいて DCA 回帰を実行するための関数 getDCAParamRate および getDCAParamProd を作成し、変更することができました。特定の手順を開始する箇所を示す曲線フィッターアプリのスクリーンショットを図 13 に示します。

カスタム回帰モデルが表示されている曲線フィッターアプリのスクリーンショット。

図 13. 石油生産量の回帰結果を表示している曲線フィッターアプリ。

表 3 は、サンプル坑井の各 DCA 回帰および各流体相の回帰パラメーターと \( R^{2} \) のリストです。一般に累積産出量データの方が平均日量よりも滑らかであるため、生産量ベースの DCA で \( R^{2} \) スコアが最も高くなるのは自然なことです。

表 3. サンプル坑井の DCA 回帰パラメーターの概要
  生産率ベースの DCA 生産量ベースの DCA
  石油 ガス 石油 ガス
\( Q_{i} \) 192095 84475.5 192095 84475.5
\( q_{i} \) 1530.6 984.06 1098.68 698.46
\( b \) 1.1398 1.279 0.9388 0.7806
\( D \) 0.0089 0.004 0.0045 0.0015
\( R^{2} \) スコア 0.945 0.784 0.999 0.997

方程式 1 および 2 の DCA パラメーターの計算を、getDCAParamRate および getDCAParamProd のみが実行するように設計しました。ただし、これらは累積生産量や平均日量は予測できません。そのため、DCA 回帰パラメーターを入力として受け入れたり、流量や体積などの必要な結果を出力できる MATLAB 関数を開発して、DCA モデルを運用可能にすることが必要です。

この目的で、flowRate(t,dcaParam) および cumulProd(t,dcaParam) の 2 つの関数をアーキテクチャに追加しました。ここで、t は単一の正のスカラーまたは複数の正のスカラーのベクトルであり、dcaParam は \( q_{i} \)、\(Q_{i} \)、\( b \)、\(D \)、および \( t_{i} \) を持つ MATLAB の構造体です。これら 2 つの関数はユーティリティ関数です。つまり、必ずしも特定のデータセットに依存しているわけではなく、DCA 回帰パラメーターに依存しています。これ以降、flowRatecumulProd の両方を、独立したユーティリティ パケージへとパッケージ化できます。

これら 2 つの関数は、生産量ベースと生産率ベースの両方におけるデータセットの DCA 回帰の比較に使用します。図 14a および 14b は、石油およびガスの平均日量を調べるための、生産量ベースと生産率ベースの DCA メソッドの比較を示しています。両方の回帰モデルは生産率の推定において良好に機能しており、非常に類似した結果を生み出します。

石油あるいはガスの平均生産率のデータと DCA モデルを比較する 2 つのグラフ。

図 14. データと DCA モデルの比較: (a) 石油の平均生産率および (b) ガスの平均生産率。

図 15a および 15b は、予測される石油およびガスの累積生産量を、それぞれ報告された生産履歴と比較したものです。1 日の平均率と同様に、両方の DCA モデルの累積生産量の予測は優れており、非常に似た結果を出しています。

石油あるいはガスの累積生産量のデータと DCA モデルを比較する 2 つのグラフ。

図 15. データと DCA モデル間の比較: (a) 石油の累積生産量および (b) ガスの累積生産量。

ソフトウェア アーキテクチャの進捗

図 16 はワークフローの現状を図示しています。ここでの大きなポイントは、DCA コンポーネントで平均率および累積生産値の予測計算に使用するユーティリティ ソフトウェアのコンポーネントを追加することです。

このユーティリティ パッケージをコンポーネント内に直接含める選択肢もありました。しかし、保守性と責任駆動設計のために、それらを分けることにしました。関数のシグネチャが変更されない限り、コンポーネントを独立して構築および保守できるため、この手法によって保守性が大幅に向上しました。同様に、ワークフローを中断せずに他の DCA モデルを今後も追加できるよう、柔軟性を加えました。

加えて、ユーティリティ関数を分離することで、コードの全般的な可読性がより高まります。他の担当者がコーディングの作業をする場合、各部分で実行される内容を正確に把握できるため、コーディング時間を短縮できます。

テストや管理が困難な "god" 関数に数百行または数千行ものコードを詰め込むよりも、最初は高コストであるように見えても、ここで挙げたようなモジュラー式のソフトウェア設計なら保守と拡張が非常に簡単です。

DCA 全体の手順を示すフローチャート。

図 16. DCA コンポーネントはユーティリティ コンポーネントを活用します。

生産予測

このソフトウェア コンポーネントでは、前のセクションで説明したユーティリティ関数 flowRate および cumulProd を使用して、将来の石油とガスの生産量を推定するために、DCA コンポーネントから派生した回帰パラメーターを活用しました。生産量の予測の生成に必要なすべての関数が使用できるようになっていたため、それらを呼び出すコードを記述する必要がありました。

そのために、各流体の well DCA 回帰パラメーターを取り込み、入力引数として予測時間をリクエストして、次の内部タスクを実行することで全体の生産量の予測を生成する、関数 generateForecast を作成しました。

  • 将来の流動時間のベクトルを生成する
  • 将来の日のベクトルを生成する
  • 石油とガスの減少率を計算する
  • 石油およびガスの累積生産量を計算する

結果として、generateForecast は、生産指標が DCA モデルで生産された予測値であるという点を除いて、元の入力 table と同じ形式を持つ新しい table を返します。

次のサブセクションでは、generateForecast の仕組みを解説します。生産量の予測は、最後の報告日から 1 か月後に始まり、目的の結果の期間に達するまで毎月報告されるものとします。

生産量の予測の生成

図 17 は、サンプル坑井における、2024 年 1 月 31 日以降の今後 50 年間の石油とガスの予測を示しています。図 17a に示される通り、生産率ベースの DCA のものと比較して、生産量ベースの DCA モデルは、石油の日量が経時的にわずかに早く減少することを予測しています。しかし、図 17b は、ガスの平均日量における予測の差異がさらに顕著であることを示しています。

石油減少率とガス減少率について、DCA ベースの生産量の予測を示す 2 つのグラフ。

図 17. DCA ベースの生産量の予測: (a) 石油減少率および (b) ガス減少率。

石油とガスの累積生産量については、図 18a および 18b が示す通り、予測モデル間の差異がより顕著になっています。累積生産量の予測の差異は、石油は 50,000 バレル、ガスは 3 億標準立方フィートであり、予測の経済的評価における不確実性の原因となる点に留意してください。

石油およびガスの累積生産量の DCA ベースの生産量予測を示す 2 つのグラフ。

図 18. DCA ベースの生産量予測: (a) 累積石油生産量および (b) 累積ガス生産量。

モデルごとに生産量の推定も異なる可能性を考えると、複数の DCA モデルを試して、調査対象の現場の生産挙動に最も近く一致するモデルを選択することが重要です。この判断を行う 1 つの方法としては、既存の坑井からの生産データを活用して、モデルの比較に役立てることです。このために、DCA コンポーネントにさらに DCA モデルを追加することも検討できますが、それでは関数の複雑性が増してしまいます。これを防ぐためには、各オブジェクトが DCA モデルに対応する、オブジェクト指向の設計を代わりに使用できます。このようにすることで、パイプとフィルターのソフトウェア アーキテクチャ自体と同様に、これらのオブジェクトを個別に管理できるため、システムの保守性と信頼性を強化できます。

ソフトウェア アーキテクチャの進捗

図 19 は、この時点までのソフトウェア アーキテクチャの進捗状況を示しています。前述の通り、生産量の予測コンポーネントは、前のセクションで作成した DCA のユーティリティ パッケージを活用し、石油とガスの生産予測を生成しています。

生産量予測コンポーネント全体の手順を示すフローチャート。

図 19. 関連する MATLAB 関数を含む生産量予測モジュール。

経済解析

このワークフローの最後の手順は、生産量の予測を経済的な指標に変換することです。アセット管理者は、一般的に石油経済と呼ばれるこの種の解析を使用して、坑井の稼動を維持するか廃棄するかについての決定を下します。投資家はこの解析を使用して、既存の坑井を購入する可能性を評価します。ただし、あらゆる石油経済解析の信頼性は、生産量の予測と関連する経済指標の精度に強く依存しています。

評価事例

ある投資家がサンプル坑井の購入に興味を持っているとします。アセット管理者は 180 万米ドルでの売却に合意しました。投資家の目標は、この投資が経済的に妥当かを判断することです。より優れた判断材料をするために、管理者は次の追加情報を提供してくれました。

  • 坑井の操業コスト (OPEX): 毎月 2,000 ドル
  • 石油生産税: 36%
  • ガス生産税: 16%

また、財務部から、解析のために 10% の割引率と、石油およびガスの平均価格として、それぞれ 1 バレルあたり 80 ドル、1,000 平方フィートあたり 2.78 ドルを検討するよう提案を受けました。さらに、市場の厳しい変動が発生した場合の投資の回復力をより良く理解するために、石油とガスの価格に変動性を取り入れたいと考えています。

経済解析全体を実行するために作成した MATLAB 関数 econAnalysis には、価格の変動性関数を含めました。この関数は、必要な経済パラメーター (割引率、CAPEX、OPEX、税率など) を含む予測 table と MATLAB 構造体を取り、正味および累積のキャッシュフロー、損益分岐点と景気後退点、および内部収益率 (IRR) を計算します。IRR の計算には、Financial Toolbox™xirr を使用しました。

数十年にわたるランダム化された石油とガスの市場価格を示す 2 つのグラフ。

図 20. MATLAB を使用した石油とガスの価格のランダム化。

石油経済の結果

図 21 はこのプロジェクトの結果となる NPV を示しており、ここからいくつかの結論を導き出せます。まず、購入を決定した場合、2026 年 2 月 11 日あたりまでに損益分岐点を迎えます。IRR もこのプロジェクトの健全性を示す、優れた指標です。もう 1 つの興味深い観測結果として、このプロジェクトを続行した場合、少なくとも 2053 年 12 月まで (約 30 年間) で、500 万米ドル近くの収益が得られます。この解析は、保守に関する将来的な支出、操業コストの増加などは考慮していないため、前述の楽観的な収益は誤解を招く可能性があることに注意してください。しかし、NPV 曲線は 2031 年 12 月までに、つまりプロジェクト開始から 8 年以内に、300 万米ドルの収益が得られることを示しており、これは 166.7% の投資回収率となります。

坑井購入プロジェクトの累積キャッシュフローの予測を示すグラフ。y 軸は現在の正味価値、x 軸は予測日。

図 21. 検討中の坑井購入について、結果として得られる NPV 曲線。

ソフトウェア アーキテクチャの進捗

経済解析コンポーネントの完成は、生産量データ解析のワークフローの完成を意味します。図 22 が示す通り、石油経済解析の関数では外部のユーティリティ コンポーネントの開発や統合が不要だったため、現時点ではアーキテクチャは未変更のままです。とはいえ、補完的なモジュールやユーティリティ パッケージを追加できる柔軟性は残されています。

データ解析ワークフローの完成した手順を示すフローチャート。

図 22. 生産量のデータ解析と関連する MATLAB 関数の完成形。

セクション

まとめ

このホワイトペーパーでは、石油とガスの生産量データの解析を自動化するためのパイプとフィルターのソフトウェア アーキテクチャを開発しました。ワークフローの各手順の詳細を確認し、従来は別々のプログラミング言語で何時間ものコーディングが必要であった複雑なタスクを、MATLAB によって実行できる方法を示しました。

また、単一の関数の呼び出しで複雑なタスクを完了できる MATLAB 関数を自動作成する方法を実際に示しました。さらに、保守性と信頼性の観点からモジュール化されたソフトウェア設計を用いることの利点について説明する一方、プロットと図の作成に必要な追加のデータ形式、クリーニング手法、DCA モデルなどの他のユーティリティ パッケージが将来的に必要となる可能性も説明しました。

最後に、本記事は入門資料として提供することを目的としているため、オブジェクト指向設計などの高度なソフトウェア設計手法は意図的に説明していないことにご注意ください。MATLAB はオブジェクト指向のプログラミング言語であるものの、本記事での学習内容を使用して、クラウド展開や C/C++ コード生成などの特定のユースケースに合わせてソフトウェア アーキテクチャを自由に作成することもできます。