socialgekon.com
  • Tärkein
  • Projektinhallinta
  • Trendit
  • Työkalut Ja Oppaat
  • Web-Käyttöliittymä
Rahoitusprosessit

Python ja talous - tehosta laskentataulukoita

Tiivistelmä

Miksi Python on loistava ohjelmointikieli rahoitusalan ammattilaisten oppimiselle?
  • Python on korkean tason ohjelmointikieli, mikä tarkoittaa, että se tiivistää ja käsittelee monia ohjelmoinnin teknisiä näkökohtia, kuten muistinhallinnan, joita on käsiteltävä nimenomaisesti muilla kielillä. Tämä tekee Pythonista helppokäyttöisen niille, joilla ei ole teknistä taustaa.
  • Koska kieli on suunniteltu luettavuutta ja helppokäyttöisyyttä ajatellen, se on yksi helpoimmista kielistä oppia. Python-koodi on tiivis ja lähellä tavallista englantia.
  • Python on ihanteellinen prototyyppien luomiseen ja nopeaan, iteratiiviseen kehitykseen. Sen interaktiiviset tulkityökalut tarjoavat ympäristöjä, joissa voit kirjoittaa ja suorittaa koodirivit erikseen ja nähdä tulokset heti.
  • Samalla Python on vankka ja suorituskykyinen, joten se on kannattava valinta myös ydinjärjestelmille ja suuremmille sovelluksille.
  • Suuren hyödyllisten työkalujen vakiokirjaston lisäksi Pythonilla on erinomaiset kolmannen osapuolen kirjastot taloudelliseen analyysiin ja laskentaan, kuten tässä opetusohjelmassa käytetyt Pandas- ja NumPy-kirjastot.
Mitkä ovat tapaukset Pythonin ja rahoituksen toteuttamiseksi yhdessä?
  • Python-komentosarjoja voidaan käyttää toistuvien tehtävien ja työnkulkujen automatisointiin, mikä säästää aikaa ja vähentää manuaalisten virheiden riskiä.
  • Skriptien avulla käyttäjät voivat helposti hakea tietoja taulukoista, tietokannoista ja sovellusliittymistä tai jopa kaapata verkkotietoja, jotka voidaan sitten käsitellä ja analysoida tehokkailla tilastollisilla ja analyyttisillä työkaluilla.
  • Erilaisten Excel-laajennusten avulla käyttäjät voivat luoda reaaliaikaisia ​​kaksisuuntaisia ​​linkkejä laskentataulukoiden ja Python-koodin välille.
  • Python mahdollistaa uudentyyppiset analyysit, kuten Monte Carlon simulaatiot, joita ei ole helposti saatavilla tavallisissa laskentataulukoissa.
  • Algoritminen kaupankäynti ei ole enää hedge-rahastojen ja suurten sijoituspankkien yksinomainen alue. Pythonilla voit kehittää, testata ja ottaa käyttöön omia kaupankäyntistrategiasi lyhyessä ajassa ja edullisin hinnoin.

Niille ammateille, jotka ovat pitkään luottaneet troolaukseen laskentataulukoiden kautta, Python on erityisen arvokas. Amerikkalainen pankki Citigroup on ottanut käyttöön Pythonissa kaatumiskurssin harjoitteluanalyytikoilleen. - Taloustieteilijä

Rahoitusalan ammattilaisilla on jo pitkään ollut pääsy niihin VBA (Visual Basic for Applications) Excelissä rakentaa mukautettuja toimintoja ja automatisoida työnkulkuja. Kun viime vuosina on tullut Google Sheets vakavaksi kilpailijaksi laskentataulukossa, Google Apps -skripti tarjoaa nyt lisävalinnan.

Haluan kuitenkin kiinnittää huomiota kolmanteen vaihtoehtoon, Python-ohjelmointikieli , josta on tullut erittäin suosittu useilla aloilla.



Tässä artikkelissa annan joitain esimerkkejä siitä, mitä voit saavuttaa Pythonilla, aloittaen yleiskatsauksesta itse kielestä ja miksi siitä on tullut niin suosittu niin monilla aloilla, kuten verkkokehitys, koneoppiminen, rahoitus, tiede ja koulutus, vain muutamia mainitakseni. Toinen puolisko koostuu sitten vaiheittaisesta opetusohjelmasta.

Kirjoitan tämän tarkoituksena on auttaa sinua päättämään, näyttääkö Python tarpeeksi kiehtovalta, jotta voit harkita sen lisäämistä taloudelliseen työkalupakkiisi. Jos otat harppauksen, kielen oppimiseen on tarjolla monia sovelluksia, kursseja, videoita, artikkeleita, kirjoja ja blogitekstejä. Teoksen lopussa olen luetellut joitain resursseja, jotka ovat auttaneet minua matkan varrella.

Käyttötapaukset: Esimerkkejä siitä, mihin olen käyttänyt Pythonia

Johdanto ohjelmointiin oli oppimista PERUS päällä Mikä tahansa 1 1980-luvun puolivälissä. Tuolloin BASIC oli yleisin aloittelijan kieli. Muita kieliä, joita käytin 80-luvun lopulla 90-luvun puoliväliin saakka, olivat Pascal ja C, mutta en koskaan käyttänyt niitä millään ammatillisella ominaisuudella, enkä uskonut tarvitsevani tai käyttäneeni ohjelmointitaitoja. Tietojeni mukaan tuolloin 90-luvun lopulla rahoitus ja ohjelmointi olivat hyvin erilaisia ​​aloja, kun päätin aloittaa uran rahoituksen alalla.

Nopeasti eteenpäin vuoteen 2012, ja halusin valita ohjelmoinnin takaisin harrastuksena, joten aloin tutkia tuolloin käytettävissä olevia kieliä. Kävi ilmi, että oli tapahtunut melko vähän, ja kun törmäsin Pythoniin, olin koukussa monista syistä, jotka esitän seuraavassa osassa. Siitä lähtien olen käyttänyt Pythonia monenlaisiin tehtäviin pienistä skripteistä suurempiin projekteihin, henkilökohtaisesti ja ammattimaisesti. Monilla, mutta ei kaikilla, on ollut mukana laskentataulukoita, monien rahoitusalan ammattilaisten työpöytä.

Tässä on muutama esimerkki siitä, kuinka hyvin laskentataulukot ja Python voivat toimia yhdessä:

1. Satojen toimintojen seuraaminen ajan myötä yritysjärjestelyjen integroinnin PMO-asetuksissa

Työskentelen yrityskauppojen kaikilla osa-alueilla, paitsi toteutuksen, myös integraation kanssa. Äskettäisessä tapauksessa PMO-tiimi päätti hybridiohjelmasta ja projektinhallinnasta, käyttäen vesiputoussuunnittelua ja Gantt-kaavioita korkean tason suunnitelmille jokaiselle kahdestatoista integrointityön virrasta, Kanban-hallituksen lisäksi satojen meneillään olevien toimien seuraamiseksi. päällä milloin tahansa, ensimmäisessä 100 päivän suunnitelmassa ja sen jälkeen. Valittu Kanban-työkalu MeisterTask , sisältää useita tilasto- ja raportointiominaisuuksia, mutta tarpeemme ylittivät analyysin ja esityksen suhteen, mikä vaati mukautettua ratkaisua. Tämä on työnkulku, jonka automatisoin Pythonilla:

  1. Tallenna koko hallituksen tila viikoittain CSV-tiedostona.
  2. Lue kaikki historialliset CSV-tiedostot a Pandas DataFrame .
  3. Lajittele, suodata, ryhmittele ja käsittele tietoja sovittuihin muotoihin siitä, miten haluamme seurata edistymistä (toiminnan tilan, työnkulun jne. Mukaan).
  4. Kirjoita tulosteet Excel-tiedostoon jokaisen analyysin tiedot omalla taulukollaan sellaisessa muodossa, että se voidaan yksinkertaisesti kopioida ja liittää ajatussolu kaavioita.
  5. Luo taulukoita ja kaavioita raportointipaketille kuukausittaista ohjauskomitean kokousta varten.

Komentosarjan kehittäminen vaati muutaman tunnin ennakkomaksun, mutta nyt raportointipaketin päivittäminen ohjauskomitean kokouksiin tai tapausanalyysiin kestää muutaman minuutin. Kirjaimellisesti noin 30 sekuntia siirtyäksesi oikeaan kansioon ja suorittamalla komentosarja yksirivisellä komennolla, ja sitten muutama minuutti kopioida ja liittää ulostulo dian kannelle. Kun noin 500 aktiviteettia (korttia) on kulunut kahdentoista työn aikana, noin kuukauden kuluttua toteutuksesta, viikoittainen seuranta niiden liikkumisesta kahden vuoden ohjelman aikajanalla, löydät itsesi nopeasti käsittelemään tuhansia ja lopulta kymmeniä tuhansia datapisteitä kymmenissä tiedostoja. Ilman automaatiota puhumme täällä joistakin erittäin tylsäistä tehtävistä.

Rahan aika-arvoinen kompromissi pelkän asioihin pääsyn tai alkuperäisen työmäärän lisäämisen asettamalla automaatio on yleinen aihe rahoituksessa. Tein samanlaisen päätöksen tämän prosessin ensimmäisessä vaiheessa viemällä tiedot CSV-tiedostoina. MeisterTask, kuten monet modernit verkkosovellukset, on API , joka voidaan liittää Python-sovellukseesi, mutta sen asettamiseen käytetty aika olisi paljon suurempi kuin tässä tapauksessa käytetyn tapauksen säästöt.

Joten, kuten näette, usein optimaalinen ratkaisu on automatisoida tietyt työnkulun vaiheet ja pitää muut manuaalisesti.

2. Asuntohintatilastojen analysointi Web Scrapingin, Google Maps API: n ja Excelin avulla

Toinen esimerkki on asia, jonka tein henkilökohtaisesta kiinnostuksesta, mutta haluan korostaa sen, koska se sisältää joitain muita mielenkiintoisia elementtejä Pythonin apuohjelmasta:

  1. Kerää kiinteistöjen ilmoitukset, mukaan lukien osoite, koko, huoneiden lukumäärä, kysyttävä hinta ja muut ominaisuudet tietylle alueelle; muutamasta sadasta ehkä tuhanteen riviin.
  2. Tallenna Python-tietorakenteeseen.
  3. Muodosta yhteys Google Maps -sovellusliittymään ja hae kullekin listalle kiinteistön ja tärkeimpien maamerkkien, kuten meren, kaupungin keskustan, lähimmän rautatieaseman, lähimmän lentokentän jne. Välinen etäisyys.
  4. Vie tiedot Excel-tiedostoon.
  5. Suorita käyttämällä tavallisia Excel-toimintoja regressiot , laske tilastot ja luo kaavioita vakiomittareista, kuten neliöhinta ja etäisyys maamerkkeihin.

Tulokset voidaan yhdistää omiin henkilökohtaisiin painotuksiisi mieltymysten ja taloudellisten rajoitusten suhteen, kun etsit kiinteistöä.

Nämä ovat vain kaksi esimerkkiä, jotka keskittyvät taulukkolaskentaan liittyvän työn automatisointiin ja ominaisuuksien lisäämiseen, mutta mahdollisuudet Pythonilla ovat lähes rajattomat. Seuraavassa osassa esitän syyt, miksi siitä on tullut niin suosittu, ennen kuin siirrytään vaiheittaiseen Monte Carlon simulointioppaaseen Pythonissa.

Miksi Python on loistava valinta rahoitusalan ammattilaisille

Ohjelmointikieli Python on ollut käytössä vuodesta 1990, mutta vasta viime vuosina sen suosio on räjähtänyt.

python on haetuin ohjelmointikieli

Tähän on useita syitä, katsotaanpa kutakin peräkkäin.

1. Python on korkean tason ohjelmointikieli

Korkean tason ohjelmointikieli on sellainen, joka tiivistää monia tietokoneen sisäisen toiminnan yksityiskohtia. Hyvä esimerkki on muistin hallinta. Alemman tason ohjelmointikielet edellyttävät tehtävien käsittelemiseen tarvittavan ajan ja koodirivien lisäksi yksityiskohtaista ymmärrystä tietokoneen muistin sijoittelun, allokoinnin ja vapauttamisen monimutkaisuudesta. Python tiivistää ja käsittelee monet näistä yksityiskohdista automaattisesti, jolloin voit keskittyä siihen, mitä haluat saavuttaa.

2. Se on ytimekäs

Koska Python on korkean tason ohjelmointikieli, koodi on ytimekkäämpi ja melkein kokonaan keskittynyt saavutettavan liiketoiminnan logiikkaan teknisen toteutuksen yksityiskohtien sijaan. Kielisuunnitteluvaihtoehdot myötävaikuttavat tähän: Python ei esimerkiksi vaadi kiharaa aaltosulkeita tai puolipisteitä funktioiden, silmukoiden ja viivojen määrittelemiseksi samalla tavalla kuin monet muut kielet, mikä tekee siitä suppeamman ja, kuten jotkut väittävät, parantaa luettavuus.

3. Helppo oppia ja ymmärtää

Yksi havainto, joka on vaikuttanut kielen suunnitteluun Pythonissa, on se, että ohjelmia luetaan useammin kuin kirjoitetaan. Python on loistava tässä, koska sen koodi näyttää hyvin lähellä tavallista englantia, varsinkin jos nimität skriptin tai ohjelman eri komponentit järkevällä tavalla.

4. Sopii nopeaan, iteratiiviseen kehitykseen

Valaistunut kokeilu ja virhe ovat parempia kuin virheetön äly. - David Kelley

Python on ihanteellinen prototyyppien luomiseen ja nopeaan, iteratiiviseen kehitykseen (ja kyllä, kokeiluvirheisiin), koska interaktiiviset tulkkityökalut, kuten Python-kuori , IPython- ja Jupyter-muistikirjat ovat edessä ja keskellä Python-työkaluketjussa. Näissä vuorovaikutteisissa ympäristöissä voit kirjoittaa ja suorittaa jokaisen koodirivin erikseen ja nähdä tulokset (tai hyödyllisen virhesanoman) välittömästi. Myös muilla kielillä on tämä, mutta useimmissa tapauksissa ei samassa määrin kuin Python .

5. Voidaan käyttää sekä prototyyppien tekemiseen että tuotantokoodiin

Sen lisäksi, että Python on loistava prototyyppien valmistamiseen, se on myös erinomainen ja tehokas kieli suuriin tuotantosovelluksiin. Jotkut maailman suurimmista ohjelmistoyrityksistä käyttävät Pythonia voimakkaasti useissa sovelluksissa ja käyttötapauksissa.

6. Mukana ”Paristot sisältyvät:” Python-standardikirjasto

Kaikki perustoimintojen edellyttämä osa on rakennettu suoraan kielelle, mutta sen lisäksi Python-standardikirjasto on työkaluja tiedostojen, median, verkkoyhteyksien, päivämäärä- ja aikatietojen ja paljon muuta käsittelemiseen. Tämän avulla voit suorittaa monenlaisia ​​tehtäviä ilman, että sinun tarvitsee etsiä kolmannen osapuolen paketteja.

7. Hyvät kolmannen osapuolen kirjastot taloudelliseen analyysiin

Rahoitusalan ammattilaisille Pandas sen kanssa Datakehys ja Sarja esineitä, ja Numpy sen kanssa ndarray ovat taloudellisen analyysin työhevoset Pythonin kanssa. Yhdessä matplotlibin ja muiden visualisointikirjastojen kanssa sinulla on käytettävissään upeita työkaluja tuottavuuden parantamiseksi.

8. Python on ilmainen!

Python on kehitetty avoimen lähdekoodin lisenssillä, joten se on ilmainen myös kaupalliseen käyttöön.

Vaiheittainen opas Pythonin ja Finance yhdessä käyttämiseen

Seuraavassa on vaiheittainen opetusohjelma, joka näyttää yksinkertaistetun version luomisesta Monte Carlon simulaatiosta, joka on kuvattu edellinen blogikirjoitukseni , mutta käyttämällä Pythonia @RISK-laajennuksen sijaan Excelille.

Monte Carlo -menetelmät perustuvat satunnaisotantaan numeeristen tulosten saamiseksi. Yksi tällainen sovellus on piirtää satunnaisotoksia todennäköisyysjakaumasta, joka edustaa epävarmoja mahdollisia tulevaisuuden maailmatiloja, joissa muuttujat tai oletukset voivat saada arvoja.

On hyödyllistä tehdä Monte Carlon simulointi yksinkertaistetulla DCF-arvostusmallilla sen sijaan, että näet yleisempien esimerkkien, jotka osoittavat optioiden tai muiden johdannaisten arvostuksen, koska tähän ei tarvita mitään matematiikkaa tilinpäätöksen laskennan perusteiden lisäksi. diskonttaamalla kassavirrat, jolloin voimme keskittyä Python-konsepteihin ja -työkaluihin. Huomaa kuitenkin, että tämä perusopetusmalli on tarkoitettu havainnollistamaan keskeisiä käsitteitä, eikä se ole hyödyllinen sellaisenaan käytännön tarkoituksiin. En aio koskea myöskään Monte Carlon simulaatioiden akateemisempia näkökohtia.

Opetusohjelmassa oletetaan, että olet perehtynyt ohjelmoinnin perusrakenteisiin, kuten muuttujiin ja toimintoihin. Jos ei, voi olla hyödyllistä käyttää 10 minuuttia esimerkiksi avainkäsitteiden tarkistamiseen tämä johdanto .

Lähtökohta ja haluttu tulos

Aloitan samalla hyvin yksinkertaistetulla DCF-arvostusmallilla, jota käytettiin Monte Carlon simulaatio-opetusohjelmassa. Siinä on joitain keskeisiä rivikohtia kolmesta tilinpäätöksestä ja kolme korostettua syöttösolua, joilla Excel-versiossa on pistearvioita, jotka haluamme nyt korvata todennäköisyysjakaumilla, jotta voimme alkaa tutkia mahdollisia tulosalueita.

esimerkkejä taloudellisista ennusteista

Kaksivaiheinen lähestymistapa pienen komentosarjan kehittämiseen

Tee se toimimaan, tee se oikein, tee se nopeasti - Kent Beck

Tämän opetusohjelman tarkoituksena on antaa Pythonille uusille rahoitusalan ammattilaisille johdanto paitsi siihen, miltä hyödyllinen ohjelma voi näyttää, myös johdanto iteratiiviseen prosessiin, jota voit käyttää sen kehittämiseen. Siksi sillä on kaksi osaa:

  1. Ensinnäkin kehitän toimivan prototyypin käyttämällä suoraviivaista lähestymistapaa, joka on mielestäni helppo seurata, eikä täysin toisin kuin prosessi, jota voitaisiin käyttää tämän projektin aloittamiseen, jos aloitat alusta.
  2. Sitten kun olen kehittänyt toimivan prototyypin, käyn läpi refaktorointiprosessin - muutan koodin rakennetta muuttamatta sen toiminnallisuutta. Haluat ehkä pitää kiinni siitä osasta - se on tyylikkäämpi ratkaisu kuin ensimmäinen, ja bonus on, että se on noin 75 kertaa nopeampi toteutusajan suhteen.

1. Toimivan prototyypin kehittäminen

Jupyter-muistikirjan asettaminen

Jupyter-muistikirja on loistava työkalu Pythonin kanssa vuorovaikutteiseen työskentelyyn. Se on interaktiivinen Python-tulkki, jossa on soluja, jotka voivat sisältää koodia, Markdown-tekstiä, kuvia tai muuta tietoa. Tässä opetusohjelmassa käytin Python Quant -alusta , mutta voin myös suositella Googlen yhteistyö , joka on ilmainen ja toimii pilvessä. Kun olet siellä, valitse 'Uusi Python 3 -muistikirja' Tiedosto-valikosta, ja olet valmis menemään.

Kun tämä on tehty, seuraava askel on tuoda kolmannen osapuolen paketit, joita tarvitsemme tietojen käsittelyyn ja visualisointeihin, ja kertoa ohjelmalle, että haluamme nähdä kaaviot inline-muistikirjassa erillisten ikkunoiden sijaan:

import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline

Huomautus ennen kuin aloitamme ensimmäisten muuttujiemme nimeämisen. Kuten jo korostin, luettavuus on yksi Pythonin vahvuuksista. Kielisuunnittelu tukee pitkälti sitä, mutta jokainen koodin kirjoittaja on vastuussa sen tekemisestä luettavaksi ja ymmärrettäväksi paitsi muille myös itselleen. Kuten Eaglesonin laki sanoo: 'Kaikki omat koodisi, joita et ole katsonut kuusi tai enemmän kuukautta, ovat yhtä hyvin kirjoittaneet.'

Hyvä nyrkkisääntö on nimetä ohjelman komponentit siten, että minimoisit tarpeen tarvita erillisiä kommentteja, jotka selittävät ohjelmasi.

Siirrymme tässä mielessä eteenpäin.

Tilinpäätöksen laatiminen

On olemassa monia tapoja, joilla voimme työskennellä olemassa olevien laskentataulukoiden tietojen kanssa Pythonissa. Voisimme esimerkiksi lukea taulukon Pandas DataFrame-kehykseksi yhdellä koodirivillä read_excel komento. Jos haluat tiukemman integraation ja reaaliaikaisen linkin laskentataulukon ja Python-koodin välille, on molempia vapaa ja kaupallinen käytettävissä olevat vaihtoehdot kyseisen toiminnon tarjoamiseksi.

Koska tässä oleva malli on hyvin yksinkertainen ja keskitämme meidät Python-käsitteisiin, luomme sen uudelleen tyhjästä käsikirjoituksessamme. Ensimmäisen osan lopussa näytän, kuinka voit viedä luomamme taulukkoon.

Ensimmäisenä askeleena kohti Python-esityksen luomista tilinpäätökselle tarvitsemme sopivan tietorakenteen. Valittavana on monia, jotkut sisäänrakennettuina Pythonissa, toiset eri kirjastoista, tai voimme luoda oman. Käytä nyt Pandas-kirjaston sarjaa katsomaan sen toimivuutta:

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P'] sales = pd.Series(index=years) sales['2018A'] = 31.0 sales

Tämä tulo ja sitä vastaava lähtö on esitetty alla:

sarjan luominen python-kirjastosta

Kolmen ensimmäisen rivin avulla olemme luoneet tietorakenteen, jossa on vuosiluku (jokainen merkitty osoittamaan, onko se todellinen, budjetti vai ennustettu), lähtöarvo (miljoonina euroina, kuten alkuperäisessä DCF-mallissa) ja tyhjät (NaN, 'Not a Number') solut ennusteita varten. Neljäs rivi tulostaa datan esityksen - yleensä kirjoittamalla muuttujan tai muun objektin nimi interaktiiviseen tulkkiin saat yleensä järkevän esityksen siitä.

Seuraavaksi ilmoitamme muuttujan edustavan ennakoitua vuotuista myynnin kasvua. Tässä vaiheessa se on pisteestimaatti, sama luku kuin alkuperäisessä DCF-mallissamme. Haluamme ensin käyttää samoja tuloja ja vahvistaa, että Python-versiomme toimii samalla tavalla ja antaa saman tuloksen kuin Excel-versio, ennen kuin tarkastelemme piste-estimaattien korvaamista todennäköisyysjakaumilla. Tämän muuttujan avulla luomme silmukan, joka laskee ennusteiden myynnin kullekin vuodelle edellisen vuoden ja kasvun perusteella:

growth_rate = 0.1 for year in range(1, 6): sales[year] = sales[year - 1] * (1 + growth_rate) sales

Meillä on nyt ennustettu myynti NaN: n sijaan:

python ja talous: myyntilukujen ennustaminen

Samaa lähestymistapaa noudattaen jatkamme tilinpäätöstä, ilmoitamme muuttujia tarpeen mukaan ja teemme tarvittavat laskelmat, jotta lopulta saadaan vapaa kassavirta. Saavuttuamme voimme tarkistaa, että mitä meillä on, vastaa DCF-mallin Excel-versiota.

ebitda_margin = 0.14 depr_percent = 0.032 ebitda = sales * ebitda_margin depreciation = sales * depr_percent ebit = ebitda - depreciation nwc_percent = 0.24 nwc = sales * nwc_percent change_in_nwc = nwc.shift(1) - nwc capex_percent = depr_percent capex = -(sales * capex_percent) tax_rate = 0.25 tax_payment = -ebit * tax_rate tax_payment = tax_payment.apply(lambda x: min(x, 0)) free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc free_cash_flow

Tämä antaa meille vapaat kassavirrat:

diskontattu kassavirran tuotos pythonilta

Yläpuolella oleva rivi, joka ehkä tarvitsee kommentin tässä vaiheessa, on toinen tax_payment viite. Tässä käytämme pientä toimintoa varmistaaksemme, että tilanteissa, joissa voitto ennen veroja tulee negatiiviseksi, meillä ei ole positiivista veromaksua. Tämä osoittaa, kuinka tehokkaasti voit käyttää mukautettuja toimintoja kaikkiin Pandas-sarjan tai DataFrame-kehyksen soluihin. Varsinainen toiminto on tietysti yksinkertaistaminen. Realistisempi malli a suurempi arvostus olisi erillinen veromalli, joka laskee maksetut todelliset käteisverot useiden yrityskohtaisten tekijöiden perusteella.

DCF-arvon suorittaminen

Saatuamme ennustetut kassavirrat, voimme nyt laskea yksinkertaisen päätearvon ja diskontata kaikki kassavirrat takaisin nykyhetkeen saadaksesi DCF-tuloksen. Seuraava koodi esittelee indeksoinnin ja viipaloinnin, jonka avulla voimme käyttää yhtä tai useampaa tietorakenteen elementtiä, kuten Pandas Series -objektia.

Pääset elementteihin kirjoittamalla hakasulkeet suoraan rakenteen nimen jälkeen. Yksinkertainen indeksointi käyttää elementtejä sijainnin mukaan nollasta alkaen, mikä tarkoittaa, että free_cash_flow[1] antaisi meille toisen elementin. [-1] on lyhenne viimeiseen elementtiin pääsemiseksi (viimeisen vuoden kassavirtaa käytetään päätearvon laskemiseen), ja kaksoispisteen käyttäminen antaa meille osan, mikä tarkoittaa, että [1:] antaa meille kaikki elementit paitsi ensimmäisen, koska emme halua sisällyttää historiallista vuotta 2018A DCF-arvostuksessamme.

cost_of_capital = 0.12 terminal_growth = 0.02 terminal_value = ((free_cash_flow[-1] * (1 + terminal_growth)) / (cost_of_capital - terminal_growth)) discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)] dcf_value = (sum(free_cash_flow[1:] * discount_factors) + terminal_value * discount_factors[-1]) dcf_value

dcf-tulos python-diskontatun kassavirran laskennasta

Tämä päättää prototyyppimme ensimmäisen osan - meillä on nyt toimiva DCF-malli, vaikkakin hyvin alkeellinen, Pythonissa.

Tietojen vienti

Ennen siirtymistä varsinaiseen Monte Carlon simulaatioon, tämä saattaa olla hyvä aika mainita Pandas-paketissa käytettävissä olevat vientitoiminnot. Jos sinulla on Pandas DataFrame -objekti, voit kirjoittaa sen Excel-tiedostoon yhdellä rivillä to_excel menetelmä. Vastaavia toimintoja voidaan viedä myös yli tusinaan muuhun muotoon ja kohteeseen.

output = pd.DataFrame([sales, ebit, free_cash_flow], index=['Sales', 'EBIT', 'Free Cash Flow']).round(1) output.to_excel('Python DCF Model Output.xlsx') output

esimerkki pythonilla generoidusta Excel-taulukon tuotoksesta

Todennäköisyysjakaumien luominen Monte Carlon simulaatiollemme

Nyt olemme valmiita vastaamaan seuraavaan haasteeseen: korvaamaan osa piste-estimaatin syötteistä todennäköisyysjakaumilla. Vaikka vaiheet tähän pisteeseen ovat saattaneet tuntua jonkin verran hankalilta verrattuna saman mallin rakentamiseen Excelissä, nämä seuraavat rivit antavat sinulle vilauksen siitä, kuinka tehokas Python voi olla.

Ensimmäinen askel on päättää, kuinka monta iteraatiota haluamme suorittaa simulaatiossa. 1000: n käyttäminen lähtökohtana saavuttaa tasapainon riittävien datapisteiden saamisen välillä järkevien tuloskaavioiden saamiseksi verrattuna simulaation loppuun saamiseen järkevässä ajassa. Seuraavaksi muodostamme todelliset jakaumat. Yksinkertaisuuden vuoksi tuotin kolme normaalijakaumaa täällä, mutta NumPy-kirjastossa on paljon jakeluja valita, ja on muitakin paikkoja etsiä, mukaan lukien Python-standardikirjasto . Kun olemme päättäneet käytettävän jakauman, meidän on määritettävä niiden muodon kuvaamiseen tarvittavat parametrit, kuten keskiarvo ja keskihajonta sekä haluttujen tulosten lukumäärä.

iterations = 1000 sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations) ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations) nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations) plt.hist(sales_growth_dist, bins=20) plt.show()

monte carlo -simulaatio pythonilta

Täällä voit väittää, että käyttökatteen ei pitäisi olla erillinen satunnaismuuttuja, joka on riippumaton myynnistä, vaan korreloi sen kanssa jossain määrin. Hyväksyn tämän ja lisäisin, että sen tulisi perustua vankkaan ymmärrykseen kustannusrakenteen dynamiikasta (muuttujat, puolimuuttujat ja kiinteät kustannukset) ja tärkeimmistä kustannustekijöistä (joista joillakin voi olla omat todennäköisyysjakaumansa) kuten esimerkiksi raaka-ainehinnat), mutta jätän nämä monimutkaisuudet sivuun tilaa ja selkeyden vuoksi.

Mitä vähemmän tietoja sinun on ilmoitettava valinnastasi jakelu ja parametrit, sitä enemmän joudut luottamaan erilaisten due diligence -työnkulkujen tulokseen yhdistettynä kokemukseen muodostaaksesi konsensuskuvan todennäköisten skenaarioiden alueista. Tässä esimerkissä kassavirtaennusteiden kanssa tulee olemaan suuri subjektiivinen komponentti, mikä tarkoittaa, että todennäköisyysjakaumien visualisointi tulee tärkeäksi. Täältä voimme saada perusvisualisoinnin, joka näyttää myynnin kasvun jakauman, vain kahdella lyhyellä koodirivillä. Näin voimme nopeasti tarkastella mitä tahansa silmämunan jakaumaa, joka parhaiten heijastaa joukkueen kollektiivista näkemystä.

Nyt meillä on kaikki tarvitsemamme rakennuspalikat simulaation suorittamiseen, mutta ne eivät ole sopivassa muodossa simulaation suorittamiseen. Tässä on sama koodi, jonka kanssa olemme työskennelleet toistaiseksi, mutta kaikki on koottu yhteen soluun ja järjestetty uudelleen toimintoon mukavuuden vuoksi:

def run_mcs(): # Create probability distributions sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations) ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations) nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations) # Calculate DCF value for each set of random inputs output_distribution = [] for i in range(iterations): for year in range(1, 6): sales[year] = sales[year - 1] * (1 + sales_growth_dist[0]) ebitda = sales * ebitda_margin_dist[i] depreciation = (sales * depr_percent) ebit = ebitda - depreciation nwc = sales * nwc_percent_dist[i] change_in_nwc = nwc.shift(1) - nwc capex = -(sales * capex_percent) tax_payment = -ebit * tax_rate tax_payment = tax_payment.apply(lambda x: min(x, 0)) free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc # DCF valuation terminal_value = (free_cash_flow[-1] * 1.02) / (cost_of_capital - 0.02) free_cash_flow[-1] += terminal_value discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)] dcf_value = sum(free_cash_flow[1:] * discount_factors ) output_distribution.append(dcf_value) return output_distribution

Voimme nyt suorittaa koko simulaation ja piirtää tuotosjakauman, joka on tämän yrityksen diskontattu kassavirta-arvo kussakin 1000 iteraatiossa, seuraavalla koodilla. %time -komento ei ole Python-koodi, vaan muistikirjan lyhenne, joka mittaa ajan jonkin suorittamiseksi (voit sen sijaan käyttää Python-toiminto vakiokirjastosta ). Se riippuu tietokoneesta, jossa suoritat sen, mutta tämä versio tarvitsee 1–2 sekuntia 1000 iteraation suorittamiseksi ja lopputuloksen visualisoimiseksi.

%time plt.hist(run_mcs(), bins=20, color='r') plt.show()

monte carlo -simulointilähtö python-komentosarjalta

2. Prototyypin tarkentaminen

Vielä piilevä epäily siitä, että jotain voisi yksinkertaistaa, on maailman rikkain lähde palkitseviin haasteisiin. - Edsger Dijkstra

Refactoring tarkoittaa nykyisen koodin uudelleenkirjoittamista sen rakenteen parantamiseksi muuttamatta sen toiminnallisuutta, ja se voi olla yksi hauskimmista ja palkitsevimmista koodauksen elementeistä. Tähän voi olla useita syitä. Se voi olla:

  1. Järjestä eri osat järkevämmällä tavalla.
  2. Nimeä muuttujat ja toiminnot uudelleen niiden tarkoituksen ja toiminnan selkeyttämiseksi.
  3. Salli ja valmistaudu tuleviin ominaisuuksiin.
  4. Paranna suoritusnopeutta, muistin jalanjälkeä tai muuta resurssien käyttöä.

Osoittaakseni, miltä yksi vaihe prosessissa saattaa näyttää, siivoin vain käymämme prototyypin keräämällä kaikki alkuperäiset muuttujat yhteen paikkaan, eikä hajallaan kuten prototyyppikomentosarjassa, ja optimoin sen suorittamisnopeuden prosessilla nimeltä vektorisointi .

NumPy-matriisien avulla voit ilmaista monenlaisia ​​tietojenkäsittelytehtäviä ytimekkäinä taulukkolausekkeina, jotka muuten saattavat edellyttää silmukoiden kirjoittamista. Tätä käytäntöä, jolla korvataan eksplisiittiset silmukat matriisilausekkeilla, kutsutaan yleisesti vektoriksi. Wes McKinney

Se näyttää nyt puhtaammalta ja helpommin ymmärrettävältä:

# Key inputs from DCF model years = 5 starting_sales = 31.0 capex_percent = depr_percent = 0.032 sales_growth = 0.1 ebitda_margin = 0.14 nwc_percent = 0.24 tax_rate = 0.25 # DCF assumptions r = 0.12 g = 0.02 # For MCS model iterations = 1000 sales_std_dev = 0.01 ebitda_std_dev = 0.02 nwc_std_dev = 0.01 def run_mcs(): # Generate probability distributions sales_growth_dist = np.random.normal(loc=sales_growth, scale=sales_std_dev, size=(years, iterations)) ebitda_margin_dist = np.random.normal(loc=ebitda_margin, scale=ebitda_std_dev, size=(years, iterations)) nwc_percent_dist = np.random.normal(loc=nwc_percent, scale=nwc_std_dev, size=(years, iterations)) # Calculate free cash flow sales_growth_dist += 1 for i in range(1, len(sales_growth_dist)): sales_growth_dist[i] *= sales_growth_dist[i-1] sales = sales_growth_dist * starting_sales ebitda = sales * ebitda_margin_dist ebit = ebitda - (sales * depr_percent) tax = -(ebit * tax_rate) np.clip(tax, a_min=None, a_max=0) nwc = nwc_percent_dist * sales starting_nwc = starting_sales * nwc_percent prev_year_nwc = np.roll(nwc, 1, axis=0) prev_year_nwc[0] = starting_nwc delta_nwc = prev_year_nwc - nwc capex = -(sales * capex_percent) free_cash_flow = ebitda + tax + delta_nwc + capex # Discount cash flows to get DCF value terminal_value = free_cash_flow[-1] * (1 + g) / (r - g) discount_rates = [(1 / (1 + r)) ** i for i in range (1,6)] dcf_value = sum((free_cash_flow.T * discount_rates).T) dcf_value += terminal_value * discount_rates[-1] return dcf_value

Tärkein ero, jonka huomaat tämän version ja edellisen välillä, on for i in range(iterations): n puuttuminen silmukka. NumPyn matriisitoimintoa käyttämällä tämä versio toimii 18 millisekunnissa verrattuna prototyyppiversiolle 1,35 sekuntiin - suunnilleen 75 kertaa nopeammin.

%time plt.hist(run_mcs(), bins=20, density=True, color='r') plt.show()

Esimerkki NumPy-ryhmän toiminnasta

Olen varma, että lisäoptimointi on mahdollista, koska kootin sekä prototyypin että hienostetun version lyhyessä ajassa yksinomaan tämän opetusohjelman tarkoituksiin.

Ottaen sen eteenpäin

Tämä opetusohjelma esitti joitain Pythonin tehokkaita ominaisuuksia, ja jos kehittäisit tätä edelleen, mahdollisuudet ovat melkein rajattomat. Voisit esimerkiksi:

  • Kaavi tai lataa asiaankuuluvia yritys- tai toimialakohtaisia ​​tilastoja verkkosivuilta tai muista tietolähteistä, jotta oletus- ja todennäköisyysjakaumavalintasi olisi helpompaa.
  • Käytä Pythonia kvantitatiivisissa rahoitussovelluksissa, kuten automatisoidussa kaupankäynnin algoritmissa, joka perustuu perustavanlaatuisiin ja / tai makrotaloudellisiin tekijöihin.
  • Rakenna vientiominaisuuksia, jotka tuottavat tulosta taulukkolaskenta- ja / tai esitysmuodossa käytettäväksi osana sisäistä tapahtumien tarkistus- ja hyväksymisprosessiasi tai ulkoisiin esityksiin.

En ole edes käsitellyt sitä, mitä voisit tehdä myös erilaisilla verkko-, datatieteen ja koneoppimissovelluksilla, jotka ovat vaikuttaneet Pythonin menestykseen.

Yhteenvetona: Hyödyllinen kieli rahoitusvälineille

Tässä artikkelissa esiteltiin Python-ohjelmointikieli, lueteltiin joitain syitä, miksi siitä on tullut niin suosittua rahoituksessa, ja osoitettiin, kuinka rakentaa pieni Python-komentosarja. Vaiheittainen opetusohjelma kävelin läpi, kuinka Pythonia voidaan käyttää iteratiiviseen prototyyppiin, interaktiiviseen taloudelliseen analyysiin ja sovelluskoodiin arvostusmalleille, algoritmisille kaupankäyntiohjelmille ja muille.

Minulle päivän lopussa Python-tekniikan tappajaominaisuus on, että sen kanssa on yksinkertaisesti hauskaa työskennellä! Jos pidät ongelmanratkaisusta, asioiden rakentamisesta ja työnkulkujen tehostamisesta, kannustan sinua kokeilemaan sitä. Haluaisin kuulla, mitä olet tehnyt sen kanssa tai haluaisit tehdä sen kanssa.

Suositeltavat resurssit rahoitusalan ammattilaisille Pythonin oppimiseksi

  • O’Reilly-kirjat. Voin suositella erityisesti:
    • Python for Finance kirjoittanut Yves Hilpisch
    • Pythonin oppiminen kirjoittanut Mark Lutz
    • Sujuva Python kirjoittanut Luciano Ramalho
  • Python-kvantit
  • PyCon keskustelee YouTubessa
  • Udemy

Perustietojen ymmärtäminen

Kuinka Pythonia käytetään rahoituksessa?

Pythonia käytetään enimmäkseen määrälliseen ja laadulliseen analyysiin varojen hintakehityksistä ja ennusteista. Se soveltuu hyvin myös eri tietolähteiden työnkulkujen automatisointiin.

Milloin Python luotiin?

Python suunniteltiin 1980-luvulla ja otettiin ensimmäisen kerran käyttöön joulukuussa 1989.

Mihin Python-ohjelmointia käytetään?

Python on muokattava, yleinen ohjelmointikieli, jossa on käyttötapauksia useilla aloilla. Huolehtimalla sovelluksen ohjelmoinnista se antaa ohjelmoijan keskittyä luomisensa toimivuuteen.

Sivunopeus 101: Säätiö mobiilikäyttöliittymäsuunnittelijoille

Mobiilisuunnittelu

Sivunopeus 101: Säätiö mobiilikäyttöliittymäsuunnittelijoille
Suunnittelu ihmisen käyttäytymiseen: Aineettoman määritteleminen

Suunnittelu ihmisen käyttäytymiseen: Aineettoman määritteleminen

Ux-Suunnittelu

Suosittu Viestiä
Onko Yhdysvaltain oman pääoman joukkorahoitusmarkkinat eläneet odotuksia?
Onko Yhdysvaltain oman pääoman joukkorahoitusmarkkinat eläneet odotuksia?
Fintech-teollisuuden tila (infografiikan kanssa)
Fintech-teollisuuden tila (infografiikan kanssa)
10 Yleisimmät verkkoturvan haavoittuvuudet
10 Yleisimmät verkkoturvan haavoittuvuudet
Kuka tiesi Adobe CC: n voivan kehystää?
Kuka tiesi Adobe CC: n voivan kehystää?
Opas UTF-8-koodaukseen PHP: ssä ja MySQL: ssä
Opas UTF-8-koodaukseen PHP: ssä ja MySQL: ssä
 
Fintech ja pankit: Kuinka pankkisektori voi reagoida häiriöiden uhkaan?
Fintech ja pankit: Kuinka pankkisektori voi reagoida häiriöiden uhkaan?
Shopify-suunnitteluvinkit ja UX: n parhaat käytännöt
Shopify-suunnitteluvinkit ja UX: n parhaat käytännöt
Suorita matematiikka: Mikropalvelusovellusten skaalaus orkesterin kanssa
Suorita matematiikka: Mikropalvelusovellusten skaalaus orkesterin kanssa
Aloittelijan opas vedenalaiseen valokuvaukseen iPhonella
Aloittelijan opas vedenalaiseen valokuvaukseen iPhonella
Motivaation säännöt: Tarina epäonnistuneiden myyntikannustinjärjestelmien korjaamisesta
Motivaation säännöt: Tarina epäonnistuneiden myyntikannustinjärjestelmien korjaamisesta
Luokat
Tuotemerkin SuunnitteluWeb-KäyttöliittymäVarastointiKetterä KykyLähettäminenIhmiset Ja JoukkueetSijoittajat Ja RahoitusTuotteen ElinkaariProsessi Ja TyökalutLiikevaihdon Kasvu

© 2023 | Kaikki Oikeudet Pidätetään

socialgekon.com