Отключване на силата на машинното обучение за по-ефективна финансова надлежна проверка

Тъй като целият свят се революционизира с изкуствения интелект, много автоматизация също беше внедрена в процеса на надлежна проверка на M&A. Ако използвате една от най-добрите юридически фирми, има голяма вероятност AI инструмент да премине първо през договорите. Финансовата надлежна проверка вече редовно включва бързи анализи на големи набори от данни от най-висок клас, което не беше толкова често срещано преди 5-6 години. Като казах, че все още има какво да се желае при включването на по-ефективна автоматизация в процеса на надлежна проверка на M&A.

Има редица области, в които може да се проучи по-нататъшна автоматизация, включително съответствие със счетоводните стандарти, корекции за нормализиране на EBITDA и идентифициране на NWC и подобни на дълг елементи. В тази статия ще проучим възможността за прогнозиране дали политиката за признаване на приходите на компанията е в съответствие с GAAP на САЩ или не. Ако искате да прочетете повече за това как да автоматизирате корекциите за нормализиране на EBITDA, можете да прочетете моите статии по темата тук (Нормализиране на EBITDA — Част 1 и Нормализиране на EBITDA 2 — Част 2).

Въпреки че има по-сложни начини за внедряване на тази автоматизация, включително използване на мрежи с дългосрочна краткосрочна памет (LSTM), тип повтарящи се невронни мрежи (RNN), способни да изучават дългосрочни зависимости, или да обучават затворена версия на GPT (или други LLM) когато те са налични за обучение по конкретни случаи на употреба, ние ще внедрим Naive Bayes класификатор за нашия пример.

Какво е наивен класификатор на Бейс или теорема на Байс

Наивният Байес може да звучи сложно, но вероятно е един от най-простите алгоритъм за интерпретация, след като разберете математиката зад него. Ние ще внедрим Naive Bayes класификатор в Python, но всъщност можете да направите математиката и ръчно, ако сте готови за предизвикателството. Преди да се потопим в конкретна реализация на Naive Bayes, нека опресним паметта си за теоремата на Bayes. Обещавам, че вероятно сте учили това в класа по статистика, дори и да не го помните.

Теорема на Бейс

През 18-ти век преп. Томас Байс се бори с въпроса „колко добре знаем това, което си мислим, че знаем?“. Работата му върху тази теория е публикувана посмъртно. По-късно Пиер-Симон Лаплас, френски математик, разработи по-пълна формула за тази теория, която познаваме като теоремата на Байс.

Теоремата на Байс описва вероятността за събитие въз основа на предварителни познания за условия, които могат да бъдат свързани със събитието. Като такъв, той предоставя начин за актуализиране на вероятностите, когато се придобият нови данни или станат налични нови доказателства. Байесовият възглед за вероятността се различава от честолисткия възглед за вероятността (който е традиционният възглед за вероятността, който вероятно ще изучавате във въведение в курса по статистика). Байесистите смятат вероятността за мярка за вяра и следователно вероятността е субективна и се отнася до бъдещето, докато честолистите гледат на вероятността да се отнася до минали събития.

За да разбере тази разлика чрез класически пример за хвърляне на монета, често срещаният участник би казал, че ако хвърлите монета безкраен брой пъти, тогава има 50% вероятност тя да излезе глави. Докато за байесианците изявлението, че има 50% шанс монетата да излезе на глави, просто означава, че нямате предварително убеждение да благоприятствате единия или другия резултат.

Просто заявявайки, че можете да разберете теоремата на Байс като начин за изчисляване на условна вероятност, като се имат предвид известни предварителни познания за условия, които може да са свързани с това събитие. Основната формула е следната:

P(A|B) = P(B|A) * P(A) / P(B)

Можете просто да разберете горното като последваща вероятност за A при дадено наблюдение B.

Наивен Байес

Naive Bayes е приложение на теоремата на Bayes, което предполага, че всички характеристики (в нашия модел), които се използват за вземане на решение за класификация, са независими една от друга. Това предположение опростява изчисляването на вероятностите, тъй като те вече могат да бъдат изчислени отделно за всяка характеристика.

За нашия модел ще използваме многочленен наивен класификатор на Бейс, който предполага, че всяка последна вероятност следва многочленно разпределение. Това го прави много полезен за проблеми с класификацията на текст, тъй като разглежда и честотата на думите.

Стига с теорията, да влезем в модела.

И така, как да използваме Naive Bayes класификатора, за да анализираме съответствието със счетоводните стандарти

За целите на това упражнение ще използваме много прост набор от данни за обучение и прост набор от данни за тестване. Нашата цел е да обучим нашия модел да научи кои политики за признаване на приходи са в съответствие с ASC 606 и кои не. След това ще накараме модела да предскаже дали политиката за признаване на приходите на целевата компания е в съответствие с ASC 606 или не.

Ще кодираме нашия модел в Python.

Данни за обучение

Тестови данни

Стъпка 1: Импортирайте необходимите библиотеки

import pandas as pd
import numpy as np
import re
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import nltk

Стъпка 2: Импортирайте спиращи думи и лематизатори

from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer

Ще ги използваме по-късно, за да обработим предварително политиката за признаване на приходи. Stopwords е колекция от често използвани думи (като „the“, „at“, „and“ и т.н.), които не добавят никаква прогнозна стойност към нашия модел и затова ще ги премахнем.

Лематизацията се използва за уточняване на коренната форма на дума. Това избягва необходимостта от дешифриране на цели думи, тъй като повечето думи могат да бъдат разбрани с помощта на техните коренни думи.

Стъпка 3: Заредете нашия набор от данни за обучение

# load the training data
df = pd.read_csv('./training_data.csv')

Стъпка 4: Дефинирайте функция за предварителна обработка на текстови данни

# Preprocess text data
nltk.download('stopwords')
nltk.download('wordnet')
nltk.download('punkt')
nltk.download('omw-1.4')

# Define stop words to be removed
stop_words = set(stopwords.words('english'))

# Initialize lemmatizer
lemmatizer = WordNetLemmatizer()

# Define function to preprocess text data
def preprocess_text(text):
    # Convert to lowercase
    text = text.lower()
   
    # Remove non-alphanumeric characters
    text = re.sub(r'[^a-zA-Z0-9\s]', '', text)
   
    # Tokenize text into words
    words = nltk.word_tokenize(text)
   
    # Remove stop words
    words = [word for word in words if word not in stop_words]
   
    # Lemmatize words
    words = [lemmatizer.lemmatize(word) for word in words]
   
    # Join words back into text
    text = ' '.join(words)
   
    return text

В този кодов блок:

  1. Първо изтегляме необходимите пакети
  2. След това дефинираме стоп думите, които да се използват, което е на английски в нашия пример, и инициализираме WordNetLemmatizer
  3. След това дефинираме нашата функция, която прави следното:
  • Преобразува текстове в по-нисък текст (това е важно, тъй като текстът се третира като чувствителен към главни и малки букви),
  • Премахване на всички небуквено-цифрови знаци,
  • Токенизиране на текст в думи,
  • Премахване на стоп думи и
  • Лематизиращи думи.

Стъпка 4: Приложете функцията към нашия набор от данни за обучение

# Apply preprocessing to training data
df['text'] = df['text'].apply(preprocess_text)

Стъпка 5: Конвертиране на колона is_asc_compliant в булева

# Convert is_asc_compliant column to boolean
df['is_asc_606_compliant'] = df['is_asc_606_compliant'].astype(bool)

Стъпка 6: Извлечете функции от текста с помощта на CountVectorizer

# extract features from the text using CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df['text'])

Можете просто да мислите за тази стъпка като за преобразуване на текста във вектор от числа, така че да можем да приложим математически операции върху него.

Стъпка 7: Обучение на нашия Naive Bayes класификатор

# train the Naive Bayes classifier
clf = MultinomialNB()
clf.fit(X, y)

Стъпка 8: Зареждане на нашите тестови данни и прилагане на предварителната обработка към тестовите данни

# load the test data
test_data = pd.read_csv(‘/testing_data.csv')

# Apply preprocessing to testing data
test_data['text'] = test_data['text'].apply(preprocess_text)

# Convert is_asc_compliant column to boolean
test_data['is_asc_606_compliant'] = test_data['is_asc_606_compliant'].astype(bool)

Стъпка 9: Извличане на функции от тестовите данни с помощта на същия CountVectorizer

# extract features from the test data using the same CountVectorizer
test_X = vectorizer.transform(test_data['text'])

Стъпка 10: Прогнозиране на етикетите за тестовите данни с помощта на нашия обучен модел

# predict the labels for the test data
predicted = clf.predict(test_X)

Стъпка 11: Проверка на прогнозите

# adding a predicted column to the test data and changing it to boolean
test_data['Predicted'] = predicted
test_data['Predicted'] = test_data['Predicted'].astype(bool)

#checking the results
test_data

Както можем да видим от примера по-горе, нашият модел правилно прогнозира къде счетоводната политика е в съответствие с ASC 606 или не във всички случаи.

Заключение

Понастоящем няма почти никаква автоматизация в процеса на надлежна проверка на M&A. Това е илюстрация на прост модел за автоматизиране на прогнозирането на съответствие със стандарта за признаване на приходи. Сигурен съм, че с голям набор от данни за обучение може да има редица случаи на употреба, при които автоматизацията може да бъде въведена в процеса на надлежна проверка на M&A.

Бих искал да чуя от вас какви според вас са ниско висящите плодове, които могат да бъдат автоматизирани. Моля, не се колебайте да добавите вашите коментари/мисли. Като алтернатива, ако сте на пазара, за да нарушите процеса на надлежна проверка на M&A, бих искал да се свържем и да проучим възможностите за сътрудничество.