Motivazione
Uno dei pezzi del puzzle più importanti che contribuisce all’ottimizzazione della produttività nell’industria petrolifera e del gas è rappresentato dall’analisi dei dati storici di produzione. Tecniche robuste di analisi dei dati di produzione, come l’analisi della curva di declino (DCA), aiutano gli ingegneri di produzione a valutare le metriche correlate alla produttività dei pozzi, come i tassi di declino, i tassi medi di produzione di petrolio e gas e la produzione cumulativa. Soprattutto, però, queste tecniche consentono di prevedere la produzione di petrolio e gas per valutare con precisione le prestazioni finanziarie attuali e la redditività a lungo termine di una risorsa.
Le tecniche di analisi dei dati di produzione sfruttano modelli matematici basati sui parametri prestazionali dei pozzi per il fitting dei dati storici di produzione di petrolio e gas tramite l’analisi della regressione. La DCA, per esempio, si serve di funzioni matematiche che mostrano un declino dall’andamento quasi esponenziale. L’equazione di Arps è probabilmente l’approccio alla DCA più popolare e ampiamente utilizzato nell’industria petrolifera e del gas. Come la maggior parte dei modelli DCA, quello di Arps presenta numerosi vantaggi rispetto alle tecniche più complesse, come la RTA (Rate-Transient Analysis). Innanzitutto, la DCA è facile da implementare e non onerosa da un punto di vista computazionale. In secondo luogo, la DCA presenta un numero limitato di parametri, per cui i risultati della regressione sono più semplici da interpretare. Infine, la DCA è in grado di gestire set di dati di grandi dimensioni, come record molto ricchi sullo storico della produzione di uno o più pozzi. Tuttavia, proprio come con qualsiasi altro modello, la qualità dei dati di input è fondamentale per poter ottenere un modello DCA fisicamente valido per l’analisi dei dati, la previsione della produzione e l’economia del petrolio.
In questo articolo, spiegheremo come usare MATLAB® per sviluppare e distribuire un workflow di analisi dei dati basato su DCA per i dati di produzione di petrolio e gas. Spiegheremo come formattare e pre-elaborare i set di dati storici di produzione, come creare modelli di regressione personalizzati, generare una previsione della produzione e svolgere un’analisi dell’economia del petrolio. Il nostro obiettivo principale è dimostrare come MATLAB sia in grado di aiutarti a integrare e ad affrontare le complessità previste dal workflow, attenendoti a delle pratiche di sviluppo software semplici ma al contempo robuste. A scopo dimostrativo, utilizzeremo dei report sullo storico della produzione di petrolio e gas pubblicamente disponibili sul sito web della Texas Railroad Commission (TRRC).
App web per l’analisi dei dati di produzione
Descriveremo le fasi principali del workflow per svolgere l’analisi dei dati di produzione di petrolio e gas in MATLAB, oltre ad alcune best practice sullo sviluppo e l’implementazione di software utili per progettare e personalizzare applicazioni software più affidabili a facili da manutenere per la produzione di olio e gas.
Anche se la nostra app è distribuita online, gli utenti finali hanno la possibilità di interagire con l’app web esattamente come farebbero con qualsiasi altra app tradizionale su desktop. La Figura 1 mostra la scheda Import nell’app per trascinare i dati storici di produzione. Una volta aggiunto un set di dati, l’app svolge varie operazioni di pre-elaborazione dei dati e riporta i dati risultanti nei grafici corrispondenti. I processi associati all’importazione e alla pre-elaborazione dei dati vengono spiegati nel dettaglio rispettivamente nelle sezioni Importazione dei dati e Pre-elaborazione dei dati.
Una volta importati i dati, gli utenti possono essere l’analisi della regressione DCA. La Figura 2 mostra la scheda Regression nell’app per regolare le impostazioni di regressione e scegliere se utilizzare il tasso medio di produzione o i dati di produzione cumulativi di una particolare fase fluida, petrolio o gas, per il fitting del modello. L’app consente anche all’utente di scegliere i punti di inizio e fine della finestra di regressione, aumentando la flessibilità dell’analisi per creare regressioni DCA per specifiche finestre temporali al fine di valutare il comportamento della produzione, per esempio, prima e dopo un intervento in un pozzo. Una volta definiti tutti i parametri, gli utenti possono fare clic sull’opzione Fit Data affinché l’algoritmo di ottimizzazione sottostante stimi il set di parametri DCA più adatti al set di dati. Successivamente, l’app mostra un riepilogo dei parametri utilizzati insieme al coefficiente di determinazione (R2) per ogni fase fluida. Potrai trovare maggiori informazioni sul processo DCA nella sezione Analisi della curva di declino.
Per creare una proiezione dell’output di petrolio e gas in base al modello DCA, gli utenti devono solo definire il numero di anni su cui estendere la previsione, poi l’app calcola i tassi medi di produzione e la produzione totale separatamente per ogni fase fluida. Come si può osservare nella Figura 3, l’app consente all’utente di specificare il tempo di previsione in anni servendosi di un cursore o di un campo di testo numerico. Man mano che l’opzione relativa al periodo di previsione viene modificata, i grafici relativi ai tassi medi di output e alla produzione cumulativa si aggiornano in automatico.
L’ultima fase di questo workflow di analisi dei dati di produzione è costituita dall’analisi dell’economia del petrolio, basata sui dati di previsione della produzione. L’economia del petrolio viene utilizzata dagli Asset Manager per prendere decisioni informate a tutte le fasi, dall’analisi a livello di giacimento a quella di ogni singolo pozzo. Per creare una nuova previsione nell’app, i dati vengono immediatamente trasferiti nella scheda Economics, dove l’utente potrà modificare i parametri come le imposte, le spese in conto capitale (CAPEX), le spese operative (OPEX) e i prezzi del petrolio e del gas. Successivamente, l’app aggiorna in automatico la curva del valore attuale netto (NPV) sul grafico calcolando internamente l’NPV, il punto di pareggio, il punto di recessione (ove applicabile), il tasso interno di rendimento e il ritorno sull’investimento. La Figura 4 mostra una curva dell’NPV di esempio che passa da negativa a positiva (punto di pareggio), raggiunge il valore massimo (NPV massimo), quindi inizia a decadere, suggerendo che da quel punto in avanti il funzionamento del pozzo sarà troppo costoso. L’app mostra anche l’NPV previsto più alto oltre a una data di realizzo stimata. Ci occuperemo di questi dati di implementazione nella sezione Analisi economica.
Diamo un’occhiata ad alcune delle funzionalità di sviluppo software di MATLAB utilizzate nell’app web che abbiamo sviluppato per eseguire il workflow di analisi dei dati di produzione di petrolio e gas.
Architettura software
Nella sezione precedente avrai probabilmente notato che i componenti dell’app hanno un rapporto lineare, per cui l’input di un componente dipende dall’output di un altro componente. Osserva, ad esempio, come la scheda DCA dipende dai dati forniti dalla scheda Import che, a sua volta, dipende dal set di dati fornito dall’utente. La scheda Economics dipende dalla previsione di produzione fornita dalla scheda Forecast, proprio come la scheda Forecast dipende dal modello DCA fornito dalla scheda DCA. Questo è un classico esempio del pattern dell’architettura software Pipes and Filters. Poiché questa architettura software è molto nota, baseremo la logica dell’applicazione sui concetti del suo pattern di progettazione. La Tabella 1 descrive i componenti, o filtri (Filters), insieme alle loro responsabilità, gli input e gli output.
Componente | Responsabilità | Input | Output |
Importazione dei dati |
|
|
|
Pre-elaborazione dei dati |
|
|
|
Analisi della curva di declino |
|
|
|
Previsione della produzione |
|
|
|
Analisi economica |
|
|
|
Oltre a questi componenti, abbiamo definito due moduli principali: Analisi e Risultati. Insieme, questi elementi generali coprono le funzioni principali di una determinata parte del processo. La Figura 5 raffigura l’architettura software in questione.
L’architettura Pipes and Filters offre diversi vantaggi, quali la possibilità di suddividere workflow complessi in componenti indipendenti e che cooperano tra loro, il che semplifica il debugging e la manutenzione del software. In più, è possibile ampliare le funzionalità del proprio programma aggiungendo componenti nuovi, purché tali componenti nuovi abbiano delle API (interfacce di programmazione delle applicazioni) compatibili con i propri connettori (pipe) o, più formalmente, connettori software. Un modo per ampliare il proprio sottosistema di Risultati potrebbe essere, per esempio, includere un componente Report che usa MATLAB Report Generator™ per generare dei report appositamente progettati per i Production Engineer o gli Asset Manager.
Dati di produzione di esempio
Abbiamo creato una popolazione di 200 pozzi selezionati casualmente nell’area petrolifera dell’Eagle Ford Shale nel South Texas usando lo strumento Public GIS Viewer di TRRC.
Usando lo strumento Public GIS Viewer di TRRC, abbiamo generato una popolazione di 200 pozzi che sono stati scelti su base casuale nell’area petrolifera dell’Eagle Ford Shale nel South Texas. Poi, abbiamo creato un grafico a bolle per la produzione cumulativa di petrolio, raffigurata nella Figura 6 con Mapping Toolbox.
La resa media giornaliera di petrolio dei pozzi di questa popolazione di Karnes County, che producono petrolio dal giacimento del Lower Eagle Ford, è mostrata nella Figura 7. Nota la riduzione del tasso di produzione giornaliera di petrolio, che ricorda molto da vicino un declino della legge di potenza, esattamente ciò che la DCA di Arps vuole descrivere.
Per quanto riguarda il metodo di analisi dei dati di produzione trattato in questo articolo, abbiamo selezionato in modo casuale un pozzo dall’intera popolazione di pozzi menzionata in precedenza. Per mantenerne l’anonimità, nell’articolo chiameremo questo pozzo semplicemente “pozzo di esempio”. I metadati del pozzo, come l’operatore, la posizione e così via, non saranno divulgati.
Workflow di analisi dei dati di produzione
Nella sezione precedente abbiamo definito le basi del workflow di analisi dei dati di produzione attuato nella nostra app web. Questa sezione si concentra sull’implementazione software dei componenti menzionati nella sezione Architettura software, ponendo l’accento su come usare MATLAB per costruire le funzionalità necessarie per ciascun componente. Presupponendo che gli utenti conoscano le nozioni base della programmazione informatica, nell’articolo abbiamo inserito dei link a delle risorse aggiuntive contenenti ulteriori informazioni su questi passaggi.
Il workflow è suddiviso in cinque sottosezioni. In Importazione dei dati, descriveremo il processo di importazione di set di dati TRRC in MATLAB e alcune delle difficoltà associate a questa tipologia specifica di struttura di dati. In Pre-elaborazione dei dati, esploreremo le varie opzioni disponibili in MATLAB per pulire i dati e rilevare gli outlier, quindi parleremo di come automatizzare questo processo. La definizione di modelli di regressione su misura in MATLAB, come DCA di Arps, e la loro applicazione nella previsione della produzione sono rispettivamente trattate nelle sottosezioni Analisi della curva di declino e Previsione della produzione. Infine, parleremo di come utilizzare gli indicatori economici definiti dall’utente per ottenere informazioni finanziarie dalle previsioni sulla produzione di petrolio e gas in Analisi economica.
Importazione dei dati
Le potenti funzionalità di importazione dati di MATLAB hanno reso più semplice lavorare con tipologie di dati comuni, come i fogli di calcolo di Excel®, i file con valori separati da virgole (CSV), i file immagine, audio, video e molti altri. Nonostante noi ci concentreremo sui dati memorizzati in locale, ci teniamo a sottolineare che MATLAB dispone di interfacce integrate a servizi Cloud come Amazon® Web Services, Microsoft® Azure® e Google Cloud Platform™ (cfr. Utilizzo di MATLAB e Simulink sul Cloud), nonché di database relazionali e NoSQL tramite Database Toolbox™.
Preparazione di un set di dati del pozzo di esempio
I dati di produzione di petrolio e gas del nostro pozzo di esempio sono conservati in un file CSV locale che ha la stessa formattazione del modello TRRC. Anche se le tabelle dei file CSV possono essere lette e importate direttamente in MATLAB, questo modello specifico presenta qualche difficoltà. Prima di tutto, è composto da un mix di dati numerici (come l’output netto di petrolio e gas) e metadati (tra cui il nome dell’operatore, la posizione, ecc.). In secondo luogo, alcuni punti di dati mancano e sono etichettati come NO RPT
. Infine, il formato di data/ora è piuttosto insolito poiché non indica il giorno esatto in cui un determinato report è stato registrato. Uno screenshot del set di dati del pozzo di esempio è mostrato nella Figura 8.
Nonostante queste difficoltà, MATLAB è comunque in grado di elaborare questo set di dati tramite lo strumento di importazione. Questa è un’applicazione grafica che consente di personalizzare ulteriormente i parametri di importazione indicando i tipi di dati che corrispondono a ciascuna colonna, definendo l’intervallo di dati di interesse e scegliendo se includere o meno le righe con dati mancanti.
Qui, abbiamo iniziato selezionando Number
come tipo di dato appropriato ed evidenziando i dati di produzione di petrolio e gas dalla tabella. Successivamente, abbiamo definito un tipo personalizzato di data/ora per i valori della Colonna 1 affinché MATLAB legga ed elabori le date del report in modo corretto. Dopodiché, abbiamo rinominato le Colonne 1, 2 e 4, rispettivamente con reportDates
, netOil
e netGas
.
Creazione di una funzione di importazione personalizzata
Dopo aver effettuato i passaggi necessari per preparare e importare correttamente il set di dati del pozzo di esempio, abbiamo utilizzato le funzionalità di generazione di codice di MATLAB per creare la funzione wellDataParser
, che esegue automaticamente le fasi di preparazione dati descritte in precedenza. La funzione wellDataParser
può essere utilizzata per importare i set di dati TRRC dai file CSV direttamente dalla riga di comando di MATLAB. Questa funzione genera una tabella contenente dati grezzi utilizzabili nella fase di analisi seguente, proprio come descritto nella sezione Architettura software.
Poiché wellDataParser
viene creata come una funzione “white box”, è possibile modificarla affinché supporti più funzionalità. Noi, per esempio, abbiamo calcolato l’ultimo giorno di una determinata data del report ed eseguito il refactoring di tutte le date del report in reportDates
, come mostrato nella Figura 9.
Suggerimento pro: è possibile utilizzare i datastore insieme a Parallel Computing Toolbox™ per importare contemporaneamente centinaia, o addirittura migliaia, di set di dati TRRC.
Pre-elaborazione dei dati
Come abbiamo osservato nella sezione precedente, talvolta i set di dati contengono elementi mancanti o non validi, come i valori Inf
o NaN
. Questi possono essere prontamente rimossi applicando la funzione MATLAB integrata rmmissing
al set di dati. I dati, però, possono anche contenere delle anomalie difficili da riconoscere tramite ispezione visiva.
Pulizia di un set di dati di produzione
Fortunatamente, i dati incoerenti possono essere puliti con l’app Data Cleaner. Questa app esplora e visualizza i dati, quindi definisce le regole per il rilevamento degli outlier. La Figura 10 mostra un’istantanea dell’app Data Cleaner con un’analisi visiva di netOil
e di netGas
dal nostro pozzo di esempio. Dopo aver definito le azioni necessarie per ripulire la nostra raccolta di dati, abbiamo utilizzato l’app Data Cleaner per creare la funzione personalizzata wellDataCleaner
, che contiene le azioni di pre-elaborazione che avevamo eseguito nell’app.
Incremento dei dati
A questo punto il set di dati è pulito. La fase successiva consiste nel definire le variabili per eseguire l’analisi di regressione DCA, nello specifico i tempi operativi (vale a dire il flowing time), i tassi medi giornalieri di petrolio e gas e la produzione cumulativa di petrolio e gas. Poiché wellDataCleaner
è una funzione “white box”, abbiamo aggiunto il codice necessario per calcolare le feature mancanti flowTime
, oilRate
, gasRate
, cumOil
e cumGas
e inserirle nella tabella di output in modo da rispettare il requisito del piano definito in Architettura software. La Figura 11 mostra la tabella pre-elaborata per il nostro pozzo di esempio.
Progressi dell’architettura software
Lo sviluppo della pipeline di analisi dei dati di produzione è illustrata nella Figura 12, dove le funzioni MATLAB personalizzate wellDataParser
e wellDataCleaner
denotano i componenti software per l’importazione e la pre-elaborazione dei dati. La freccia blu nell’immagine rappresenta la tabella grezza, che è il risultato della prima funzione e viene utilizzata come input dalla seconda. In MATLAB, la relazione tra queste due parti può essere ottenuta come indicato di seguito:
>> well = wellDataParser("sampleWellData.csv"); >> well = wellDataCleaner(well);
Il codice riportato sopra illustra chiaramente il connettore (pipe) che collega i componenti di importazione dei dati e pre-elaborazione dei dati. Come si può notare, wellDataCleaner
di fatto utilizza la memoria modificando l’oggetto “well” esistente invece di restituirne uno nuovo.
Suggerimento pro: MATLAB mette a disposizione numerosi esempi per usare l’app Data Cleaner. Per saperne di più, consulta la documentazione MATLAB.
Analisi della curva di declino
Molti operatori del settore considerano le equazioni di Arps come il modello standard per la DCA nel campo dell’analisi dei dati di produzione di petrolio e gas. La sua equazione più nota è il declino iperbolico basato sul tasso che descrive il decadimento della produzione giornaliera media nel tempo in funzione di tre parametri di regressione (tasso iniziale \( q_{i} \) (volume/giorno), tasso di declino \( D \) (1/giorno) e fattore \( b \)) e rispetto a un tempo di riferimento \( t_{i} \) (giorni). L’equazione è definita come indicato di seguito:
\( q(t; t_{i}) = \frac{q_{i}}{[1 \ + \ bD(t \ - \ t_{i})]^{\frac{1}{b}}} \)
dove \( q(t; t_{i}) \) rappresenta il tasso di produzione a \( t > t_{i} \). La seconda equazione correlata alla produzione cumulativa si ottiene dopo aver integrato l’Equazione 1 nel tempo, dal tempo di riferimento \( t_{i} \) al tempo \(t\) > \( t_{i} \). Di conseguenza, l’equazione di Arps basata sulla produzione è definita come segue:
\( Q(t; t_{i}) = Q_{i} + \frac{q_{i}^{b}}{D(b \ - \ 1)}(q^{1-b}(t; t_{i}) - q_{i}^{1-b}) \)
dove \( Q(t;t_{i}) \) rappresenta la produzione cumulativa a \( t>t_{i} \). Come si può notare, l’Equazione 2 integra la produzione cumulativa di partenza \( Q(t_{i}) ≡ Q_{i} \) come parametro. Tale parametro può essere ottenuto dai dati di produzione di un pozzo oppure definito come parametro di regressione extra. Nella Tabella 2 troviamo un riepilogo delle unità utilizzate nell’analisi DCA.
Fluido | Tasso di produzione | Produzione cumulativa |
Petrolio | Barili al giorno (bbl/giorno) |
Barili (bbl) |
Gas | Milioni di piedi cubi standard al giorno (MMscf/giorno) |
Milioni di piedi cubi standard (MMscf) |
Creazione dei modelli di regressione DCA
Abbiamo creato dei modelli di regressione DCA su misura in base alle Equazioni 1 e 2 per ogni fase fluida in modo indipendente, usando Curve Fitter di Curve Fitting Toolbox™. Qui, presupponendo che la tabella well
sia nella tua area di lavoro, ti guideremo attraverso le quattro fasi che abbiamo utilizzato per sviluppare la regressione DCA basata sul tasso per l’output medio giornaliero di petrolio:
- Passaggio 1: importa
well
e assegna i dati x e y rispettivamente awell.flowTime
e awell.oilRate
. Come si può osservare, il tasso di petrolio ha un picco e poi inizia a diminuire a circa 120 giorni, per cui non dovresti includere nessun dato prima di questo punto. - Passaggio 2: usa l’opzione Custom Equation per creare un modello DCA basato sul tasso. MATLAB tenterà di eseguire subito la regressione, la quale probabilmente non riuscirà per via di problemi di convergenza causati dal fatto che uno o più parametri di regressione si avvicinano troppo allo zero oppure diventano negativi o estremamente grandi. Risolvi il problema definendo confini fisicamente rilevanti per ogni parametro. Anche una buona ipotesi iniziale per ogni parametro aiuterà l’algoritmo a convergere più rapidamente.
- Passaggio 3: controlla le statistiche riepilogative dell’operazione e assicurati che i parametri di regressione risultanti siano ragionevoli e rientrino nei limiti specificati. MATLAB ne mostrerà i valori e i limiti di confidenza al 95%. La somma dei quadrati degli errori risultante, R2 e l’errore quadratico medio (RMSE) ti danno un’idea migliore della buona riuscita della regressione. MATLAB si riferisce a queste statistiche riepilogative con l’espressione “goodness-of-fit” (
gof
). - Passaggio 4: usa l’opzione Export per generare una funzione che contenga l modello di regressione risultante, insieme alla statistica
gof
.
Per creare le restanti regressioni DCA, abbiamo ripetuto gli stessi passaggi. Di conseguenza, abbiamo potuto creare e modificare le funzioni getDCAParamRate
e getDCAParamProd
per eseguire le regressioni DCA per le fasi petrolio e gas, rispettivamente, in base alle Equazioni 1 e 2. Lo screenshot dell’app Curve Fitter che indica dove iniziare i vari passaggi è mostrato nella Figura 13.
I parametri di regressione e \( R^{2} \) per ogni regressione DCA e fase fluida nel nostro pozzo di esempio sono indicati nella Tabella 3. Poiché i dati di output cumulativo in genere sono più uniformi dei tassi medi giornalieri, non sorprende il fatto che la DCA basata sulla produzione produca i punteggi \( R^{2} \) più alti.
DCA basata sul tasso | DCA basata sulla produzione | |||
Petrolio | Gas | Petrolio | Gas | |
\( 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 |
Punteggio \( R^{2} \) | 0.945 | 0.784 | 0.999 | 0.997 |
Abbiamo progettato getDCAParamRate
e getDCAParamProd
in modo che la nostra unica responsabilità fosse quella di calcolare i parametri della DCA per le Equazioni 1 e 2. Tuttavia, non sono in grado di prevedere la produttività cumulativa né l’output medio giornaliero. È pertanto necessario rendere i modelli DCA operativi sviluppando delle funzioni MATLAB che possano accettare i parametri di regressione DCA come input ed emettere il risultato richiesto, come la portata o il volume.
A tal fine, abbiamo aggiunto due funzioni alla nostra architettura, flowRate(t,dcaParam)
e cumulProd(t,dcaParam)
, dove t
è uno scalare positivo o un vettore di scalari positivi e dcaParam
è una struttura MATLAB che contiene \( q_{i} \), \(Q_{i} \), \( b \), \(D \) e \( t_{i} \). Queste due funzioni sono funzioni di utilità, vale a dire che non dipendono necessariamente da un set di dati specifico ma al contrario dipendono dai parametri di regressione DCA. D’ora in avanti, sia flowRate
sia cumulProd
possono essere pacchettizzate insieme in un pacchetto di utilità indipendente.
Abbiamo utilizzato queste due funzioni per confrontare la regressione DCA per il nostro set di dati, sia quella basata sulla produzione che quella basata sul tasso. Un confronto dei metodi di DCA basati sulla produzione e sul tasso per esaminare l’output giornaliero medio di petrolio e gas è presentato nelle Figure 14a e 14b. Entrambi i modelli di regressione danno buoni risultati nella stima dei tassi di produzione, producendo risultati del tutto comparabili.
Le Figure 15a e 15b confrontano la produzione prevista cumulativa di petrolio e gas, rispettivamente, alla produzione storica registrata. Analogamente al caso dei tassi giornalieri medi, entrambi i modelli DCA generano un buon risultato nel prevedere la produzione cumulativa, mostrando al contempo un esito molto simile.
Progressi dell’architettura software
La Figura 16 illustra lo stato attuale del workflow. L’aggiunta di un componente software di utilità, che il componente DCA utilizza per calcolare i numeri previsti relativi al tasso medio e alla produzione cumulativa, è l’aspetto più importante su cui focalizzarsi ora.
Avevamo la possibilità di includere questo pacchetto di utilità direttamente nel componente. Tuttavia, siccome i cardini del progetto sono la manutenibilità e la responsabilità, abbiamo preferito tenerli separati. Questo approccio ha determinato un notevole aumento della manutenibilità, in quanto i componenti possono essere costruiti e sottoposti a manutenzione in modo indipendentemente gli uni dagli altri, purché la firma delle funzioni resti invariata. Analogamente, abbiamo aumentato la flessibilità in modo da poter aggiungere altri modelli DCA in futuro senza dover interrompere il workflow.
In più, se teniamo le funzioni di utilità separate il codice risulta più leggibile in generale, per cui se qualcun altro volesse lavorarci, saprebbe esattamente qual è la funzione prevista di ogni parte, con una riduzione dei tempi di codifica.
Una progettazione software modulare, come quella suggerita in questa sede, è ben più semplice da mantenere e da espandere rispetto ad accumulare centinaia o addirittura migliaia di righe di codice in funzioni cosiddette “god function” che sono difficili da testare e gestire, anche se questo approccio potrebbe sembrare molto più costoso all’inizio.
Previsione della produzione
Per questo componente software, abbiamo sfruttato i parametri di regressione derivati dal componente DCA per stimare la produzione futura di petrolio e gas utilizzando le funzioni di utilità flowRate
e cumulProd
introdotte nella sezione precedente. Poiché tutte le funzioni necessarie per generare una previsione della produzione erano disponibili a questo punto, dovevamo scrivere il codice per invocarle.
Nel farlo, abbiamo creato la funzione generateForecast
, che prende i parametri di regressione DCA di well
per ogni fluido e richiede i tempi di previsione come argomenti di input, generando una previsione della produzione completa tramite l’esecuzione delle seguenti attività interne:
- Generazione di un vettore di flow time futuri
- Generazione di un vettore di date future
- Calcolo dei tassi di declino di petrolio e gas
- Calcolo della produzione cumulativa di petrolio e gas
In conseguenza a ciò, generateForecast
genera una nuova tabella che ha lo stesso formato della tabella di input originale, a eccezione del fatto che le metriche di produzione sono valori relativi al futuro generati con il modello DCA.
La sottosezione che segue descrive il funzionamento di generateForecast
. Abbiamo ipotizzato che la previsione della produzione inizi un mese di calendario dopo l’ultima data registrata e che sarà registrata a cadenza mensile fino al raggiungimento del tempo di previsione stabilito.
Generazione di una previsione della produzione
La conseguente previsione di petrolio e gas per il nostro pozzo di esempio per i prossimi 50 anni, a partire dal 31 gennaio 2024, è mostrata nella Figura 17. Rispetto al suo equivalente della DCA basata sul tasso, il modello DCA basato sulla produzione prevede una riduzione leggermente più drastica nell’output del petrolio nel tempo, osservabile nella Figura 17a. Tuttavia, la Figura 17b mostra che la differenza nelle proiezioni sembra più pronunciata in relazione all’output giornaliero medio del gas.
La differenza tra i modelli di previsione diventa più significativa per quel che riguarda la produzione cumulativa di petrolio e gas, come si può notare nelle Figure 18a e 18b. Si noti che la differenza nella produzione cumulativa prevista è di oltre 50.000 barili per il petrolio e di 300 milioni di piedi cubi standard per il gas, il che può introdurre un certo grado di incertezza nella valutazione economica delle prospettive.
Dato che modelli diversi possono produrre stime di produzione diverse, è fondamentale sperimentare modelli DCA diversi e selezionare quello che si avvicina di più al comportamento di produzione del giacimento oggetto di studio. Un modo per prendere questa decisione consiste nel servirsi dei dati di produzione di pozzi esistenti per facilitare il confronto tra modelli. A tal fine, potresti aggiungere più modelli DCA al componente DCA, ma questo aumenterà la complessità delle tue funzioni. Per evitarlo, puoi ricorrere a una progettazione orientata agli oggetti in cui ciascun oggetto corrisponde a un modello DCA. In questo modo aumenterai la manutenibilità e l’affidabilità del tuo sistema in quanto tali oggetti possono essere gestiti separatamente, proprio come la stessa architettura software Pipes and Filters.
Progressi dell’architettura software
La Figura 19 illustra i progressi che abbiamo fatto finora con la nostra architettura software. Come accennato in precedenza, il componente di previsione della produzione sfrutta il pacchetto di utilità DCA creato nella sezione precedente per generare una previsione della produzione di petrolio e gas.
Analisi economica
L’ultimo passaggio del nostro workflow consiste nel tradurre una previsione di produzione in metriche finanziarie. Gli Asset Manager si affidano a questo tipo di analisi, comunemente chiamate “economia del petrolio” (petroleum economics), per prendere decisioni in merito al mantenimento o alla cessione dei pozzi. Gli investitori sfruttano questa analisi per valutare la possibilità di acquistare pozzi esistenti. Tuttavia, l’attendibilità di qualsiasi analisi di economia del petrolio dipende soprattutto dalla precisione delle previsioni di produzione e dalle metriche finanziarie associate.
Esempio di valutazione
Supponiamo che un investitore sia interessato all’acquisto del nostro pozzo di esempio. Il proprietario dell’asset accetta di vendere a 1,8 milioni di USD. Il tuo obiettivo è quello di determinare se questo investimento è finanziariamente solido. Per aiutarti a prendere una decisione migliore, il proprietario ti fornisce qualche informazione in più:
- Costo operativo del pozzo (OPEX): 2.000 $/mese
- Imposta sulla produzione del petrolio: 36%
- Imposta sulla produzione del gas: 16%
Inoltre, per l’analisi il tuo ufficio finanziario si raccomanda di prendere in considerazione uno sconto del 10% e un prezzo medio del petrolio e del gas pari rispettivamente a 80 $/barile e a 2,78 $/mille piedi cubi. Per di più, vorresti introdurre variabilità nei prezzi del petrolio e del gas per comprendere meglio la resilienza del tuo investimento di fronte a forti fluttuazioni del mercato.
Abbiamo incluso la variabilità del prezzo nella funzione MATLAB econAnalysis
, creata per svolgere l’intera analisi economica. Questa funzione prende una tabella di previsione e una struttura MATLAB contenente i parametri finanziari necessari (come le percentuali di sconto, CAPEX, OPEX, le aliquote fiscali, ecc.) e calcola il flusso di cassa cumulativo e netto, il punto di pareggio e quello di recessione e il tasso interno di rendimento (IRR). Per calcolare l’IRR, abbiamo utilizzato xirr
di Financial Toolbox™.
Risultati dell’economia del petrolio
La Figura 21 mostra l’NPV risultante per questo progetto, il quale consente di trarre diverse conclusioni. Prima di tutto, se decidi di procedere, potresti andare in pareggio entro o verso l’11 febbraio 2026. L’IRR è un altro importante indicatore dello stato di salute del tuo progetto. Un’altra osservazione interessante è che guadagneresti circa 5 milioni di USD se mantenessi il progetto almeno fino a dicembre 2053, ovvero per una trentina d’anni. Tieni presente che questa analisi non considera le eventuali spese future correlate alla manutenzione, all’aumento dei costi operativi e così via, per cui il rendimento ottimista potrebbe essere fuorviante. Tuttavia, la curva dell’NPV mostra che potresti guadagnare circa 3 milioni di USD entro il 31 dicembre 2031, vale a dire in otto anni di progetto, il che rappresenterebbe un ritorno sull’investimento del 166,7%.
Progressi dell’architettura software
Con il completamento del componente di analisi economica, si completa il workflow di analisi dei dati di produzione. Come mostrato nella Figura 22, in questa fase l’architettura è rimasta invariata in quanto la funzione di analisi dell’economia del petrolio non richiede lo sviluppo né l’integrazione di componenti di utilità esterni. Nonostante tutto, la possibilità di aggiungere moduli complementari e pacchetti di utilità non viene a mancare.
Riepilogo
In questo articolo, abbiamo sviluppato un’architettura software Pipes and Filters per automatizzare l’analisi dei dati di produzione di petrolio e gas. Abbiamo esaminato fin nel più piccolo dettaglio ogni passaggio del workflow, mostrando come MATLAB ci ha permesso di svolgere attività intricate che avrebbero richiesto ore di codifica in un linguaggio di programmazione separato.
Abbiamo anche dimostrato come creare in modo automatico delle funzioni MATLAB in grado di completare attività complesse richiamando una sola funzione. Abbiamo altresì parlato dei vantaggi derivanti dal disporre di una progettazione software modulare in termini di manutenibilità e affidabilità, sottolineando anche che ulteriori formati di dati, tecniche di pulizia, modelli DCA e altri pacchetti di utilità per creare grafici e figure potrebbero essere necessari in futuro.
Infine, vale la pena sottolineare che abbiamo deliberatamente scelto di non parlare delle pratiche avanzate di progettazione software, come la progettazione orientata agli oggetti, poiché questo articolo intende offrire nozioni base sull’argomento. Tuttavia, MATLAB è un linguaggio di programmazione orientato agli oggetti per cui hai la totale libertà di utilizzare le nozioni apprese qui per creare architetture software per casi d’uso specifici, come la distribuzione su Cloud e la generazione di codice C/C++.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)