Определение стоимости стартапа на ранней стадии в большинстве случаев очень сложно из-за ограниченности исторических данных, незначительной или нулевой выручки, рыночной неопределенности и многого другого. Поэтому традиционные методы оценки, такие как дисконтированный денежный поток (DCF) или мультипликатор (CCA), часто приводят к ненадлежащим результатам. С другой стороны, альтернативные методы оценки остаются предметом субъективной оценки отдельных лиц и становятся черным ящиком для других.

Таким образом, основное исследование использует алгоритмы машинного обучения для прогнозирования справедливой, основанной на данных и понятной оценки стартапов. Три разных источника данных объединяются и применяются к трем регрессионным моделям. Производительность регрессионных моделей сравнивается по определенным измерениям, и конечным результатом является непрерывное числовое значение - прогнозируемая начальная оценка.

Самое важное: получение правильных данных

Чтобы построить модель машинного обучения и получить значимые результаты, важно иметь надежную базу данных. В этом случае окончательный набор аналитических данных представляет собой комбинацию публичных и частных анонимных источников данных. Исследование стало возможным благодаря партнерству с investory.io, чтобы получить доступ к анонимным ключевым показателям эффективности, а также к данным о капитале компаний на ранней стадии. В сочетании с Crunchbase можно сопоставить эти данные с этапами финансирования, раундами финансирования, местоположениями и размером команды. И последнее, но не менее важное: мы использовали данные социальных сетей, поскольку в предыдущем исследовании (Социальные сети - это новые финансовые возможности, Джин и др., 2017 г.) была обнаружена взаимосвязь между вероятностью закрытия инвестиционного раунда и действиями в Твиттере. На этом этапе большое спасибо Storyclash за доступ к их потрясающей платформе аналитики социальных сетей.

Предварительная обработка данных

Большую часть усилий пришлось потратить на объединение различных источников данных и их очистку. В то время как данные investory.io уже поступали в чистом числовом формате, данные Crunchbase, например, не проходили через их API, и поэтому пришли в очень нечистом формате.

В самом начале обзор различных таблиц и информации был создан с помощью простого клиента базы данных DBEAVER. После этого соответствующая информация была извлечена, преобразована и загружена в основном с помощью программирования на Python.

Поскольку это привело к появлению бесчисленных строк кода, мы не будем вдаваться в подробности, а выберем несколько примеров для нормализации данных ниже. Но просто чтобы дать вам краткое представление: были включены компании из более чем 50 стран, с разными валютами и местными особенностями. Часто говорят, что подготовка, очистка и преобразование данных отнимает 80% времени специалиста по данным. Это утверждение подтверждается и в этом случае.

Нормализация и масштабирование

Важным шагом в подготовке набора данных для наших алгоритмов машинного обучения была нормализация. Идея состоит в том, чтобы привести числовые значения в единую шкалу. Это необходимо, поскольку численность персонала и выручка являются двумя характеристиками. Хотя выручка может принимать числовое значение с 6 цифрами, очень маловероятно, что численность персонала будет иметь значения выше 100. Функции имеют совсем другой диапазон, и выручка будет влиять на нашу модель больше только из-за ее более высоких значений.

#Data Normalization
from sklearn.preprocessing import MinMaxScaler
#Select numerical columns which needs to be normalized
train_norm = x_train
test_norm = x_test
# Normalize Training Data 
scaler = MinMaxScaler(feature_range=(0, 1))
x_train_norm = scaler.fit_transform(train_norm)
#Converting numpy array to dataframe
training_norm_col = pd.DataFrame(x_train_norm, index=train_norm.index, columns=train_norm.columns) 
x_train.update(training_norm_col)
print (x_train.head())
# Normalize Testing Data by using mean and SD of training set
x_test_norm = scaler.transform(test_norm)
testing_norm_col = pd.DataFrame(x_test_norm, index=test_norm.index, columns=test_norm.columns) 
x_test.update(testing_norm_col)
print (x_train.head())

Скалер MinMax очень чувствителен к выбросам. Если в ваших данных есть серьезные выбросы, позаботьтесь об этом заранее. Диапазон нормализованных данных обычно составляет от нуля до единицы, как показано в приведенном выше коде.

Применение регрессионных моделей

В рамках проекта к набору данных применялись три регрессионные модели. Они были выбраны в соответствии с их характеристиками и обычным назначением. Каждая регрессионная модель оценивалась с помощью трех показателей: средняя абсолютная ошибка, среднеквадратичная ошибка и R-квадрат.

Линейная регрессия
Линейная регрессия описывает процесс поиска прямой линии, которая максимально приближена к заданным точкам данных. Затем модель пытается минимизировать квадратичные ошибки. Поскольку предполагается, что оценка компании постепенно увеличивается с улучшением показателей, к данному набору данных применяется линейная регрессия. Кроме того, поскольку в наборе данных для этого проекта представлено несколько многочисленных функций, это не простая, а множественная линейная регрессия. Поскольку этот проект настроен на Python, модуль statsmodels используется для выполнения регрессии и оценки результатов прогнозирования. Хотя доступно несколько классов, был выбран обычный метод наименьших квадратов, поскольку он в основном используется для линейных отношений в обучающих данных.

# Linear Regression
import pandas as pd
from sklearn import linear_model
import statsmodels.api as sm
# with sklearn
regr = linear_model.LinearRegression()
regr.fit(x_train, y_train)
print('Intercept: \n', regr.intercept_)
print('Coefficients: \n', regr.coef_)
# with statsmodels
x_train = sm.add_constant(x_train) # adding a constant
 
model_OLS = sm.OLS(y_train, x_train).fit()
#predictions = model.predict(x_test) 
 
print_model = model_OLS.summary()
print(print_model)

Константа (const) в первой строке указывает оценочную оценку, если все другие переменные равны нулю. Эта константа рассчитана на уровне 986 000 евро. Кроме того, коэффициент дохода со значением p, равным 0,003, является статистически значимым для модели. После удаления одного коэффициента за другим, всегда имеющего наиболее незначительное значение, остались коэффициенты, четко определяющие модель: выручка и численность персонала с p-значением 0,000 и 0,004.

Поли регрессия
Полиномиальная регрессия выполняется в два этапа. Прежде всего, данные необходимо преобразовать в полином. Степень единицы создала бы простую линейную регрессию. Чтобы создать полиномиальную регрессию, степень должна быть выше единицы и выбираться тщательно, потому что, если значение будет выбрано слишком высоким, модель может быть переобучена.

Окончательный код полиномиальной регрессии выглядит следующим образом:

# Poly Regression
import operator
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.preprocessing import PolynomialFeatures
# with sklearn
polynomial_features= PolynomialFeatures(degree=2)
x_poly = polynomial_features.fit_transform(x_train)
model = LinearRegression()
model.fit(x_poly, y_train)
y_poly_pred = model.predict(x_poly)
MAE = mean_absolute_error(y_train,y_poly_pred)
rmse = np.sqrt(mean_squared_error(y_train,y_poly_pred))
r2 = r2_score(y_train,y_poly_pred)
print(MAE)
print(rmse)
print(r2)

Регрессия нейронной сети

Нейронные сети хорошо известны тем, что превосходят традиционные алгоритмы обучения, особенно когда речь идет о задачах распознавания изображений или классификации. Применение нейронных сетей к задачам регрессии не так часто встречается в существующей литературе. Вероятно, это связано с тем, что нейронная сеть для регрессии может рассматриваться как чрезмерно спроектированная для регрессии, что во многих случаях проще и не требует такой большой вычислительной мощности. Но с другой стороны, также утверждается, что глубокие нейронные сети имитируют человеческий мозг и поэтому лучше справляются со сложными задачами. В заключение того факта, что преобладающий набор данных очень сложен и имеет множество функций, идея состоит в том, чтобы применить нейронную сеть для повышения производительности, конкурируя с ранее применявшимися традиционными моделями.

## Neural Network
model = Sequential()
model.add(Dense(256, input_dim=10, kernel_initializer='normal', activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])

В этом конкретном случае модель имеет один входной слой, два скрытых слоя с 512 узлами и один выходной слой. Выбранная функция активации - это выпрямленная линейная единичная функция (ReLU). Эта функция широко используется из-за и обычно является хорошим первым выбором из-за ее хорошей производительности при низкой вычислительной мощности и ее способности не активировать все нейроны одновременно. Последний слой - это выходной слой только с одним узлом, который должен делать окончательный вывод. В этом случае оценка частной компании. В этом случае наилучшие результаты были достигнуты со среднеквадратичной ошибкой измерения потерь и оптимизатором adam. В отличие от оптимизации стохастического градиентного спуска, оптимизатор Адама управляет скоростью обучения для каждого параметра (веса) в сети и настраивает их индивидуально. Окончательная модель нейронной сети выглядит следующим образом:

Оценка производительности модели
R2, MAE и RMSE используются для определения общей производительности каждой модели и их сравнения. , интерпретация коэффициентов помогает найти драйверы модели. Перед интерпретацией результатов можно увидеть, что полиномиальная регрессия превосходила регрессию нейронной сети и линейную регрессию.

Кроме того, коэффициент дохода со значением p, равным 0,003, является статистически значимым для модели. После удаления одного коэффициента за другим, всегда с наиболее незначимым значением, модель явно определяла два коэффициента: выручка и численность персонала с p-значением 0,000 и 0,004.

Результат прогнозирования оценок стартапов

Самой производительной моделью машинного обучения была модель полиномиальной регрессии. Его объясненная дисперсия составила 28% процентов, что приемлемо с точки зрения имитации человеческого поведения. Кроме того, средняя ошибка составила 830 тыс. Евро, а функции KPI «Выручка» и «Численность персонала» имеют статистически значимое влияние на модель.

Базовая прикладная модель машинного обучения учитывает только структурированные данные о производительности. Важные факторы, которые обычно сильно влияют на оценку стартапа, такие как опыт управленческой команды, технологические преимущества, рост операционного рынка и многие другие, еще не учитываются. Это также объясняет умеренное значение r-квадрат. Следует отметить, что не существует стандартных руководящих принципов, определяющих уровень принятия, когда речь идет о r-квадрате, особенно когда модель имитирует поведение человека.

Исследование показывает, что с небольшим объемом структурированных данных частных и государственных компаний простая регрессионная модель может дать полезные оценки. Для дальнейшего развития модели машинного обучения и повышения ее производительности настоятельно рекомендуется принять во внимание дополнительные функции в качестве следующего шага. Неструктурированные данные из упомянутых выше областей в сочетании с дополнительными индикаторами роста, скорее всего, значительно повысят производительность модели.

***************************************************************

Особая благодарность Гильермо Фалько из investory.io и профессору доктору Барбаре Сприк из SRH Heidelberg за поддержку этого исследования.

***************************************************************

Статьи, которые вам тоже могут понравиться:

Узнайте, как прогнозировать отток клиентов

Создайте свой образец набора данных - навык, необходимый специалистам по анализу данных.

Настройте среду данных с помощью Docker

Устранение оттока - это Growth Hacking 2.0

Введение в заблуждение данными и статистикой