
Determining the valuation of an early-stage Startup is in most cases very challenging due limited historical data, little to no existing revenues, market uncertainty and many more. Traditional valuation techniques, such as Discounted Cash Flow (DCF) or Multiples (CCA), therefore often lead to inappropriate results. On the other hand, alternative valuation methods remain subject to an individual’s subjective assessment and a black box for others.
Therefore, the underlying study leverages machine learning algorithms to predict a fair, data-driven and comprehensible startup valuations. Three different data sources are merged and applied to three regression models. The regression models’ performance is compared on defined measurements and the final outcome is a continuous numeric value — the predicted startup valuation.
Applied Machine Learning For Startup Valuation (Image by Author)
In order to build a machine learning model and get significant results, it is essential to have a solid data base. In this case the final analytical data set is a combination of public and private, anonymised data sources. The study was enabled by partnering with investory.io to get access to anonymised key performance indicators, as well as cap tab le data from early-stage companies. In combination with Crunchbase it is possible to map this data to funding stages, funding rounds, locations and the team size. Last but not least we used social media data, as a previous study (“Social is the new financial”, Jin et al 2017) found a relationship between likelihood of closing an investment round and Twitter activities. At this point a big shoutout to Storyclash for access to their amazing social media analytics platform.
Data Sources Overview (Image by Author)
Most of the effort had to be spent merging the different data sources together and cleaning them. While the investory.io data came already in a clean numeric format, Crunchbase data for example was not pulled through their API and therefor came in a very unclean format.
Data Processing Overview (Image by Author)
In the very beginning an overview of the different tables and information was generated with a simple database client DBEAVER. After that relevant information was extracted, transformed and loaded mainly with the help of Python programming.
As this generated countless lines of code, we will not go into every detail, but pick some examples as data normalisation below. But just to give you a brief idea: There were companies from more than 50 countries included, with various different currencies and local peculiarities. It is often said that data preparation, cleaning and transformation consumes 80% of a data scientist’s time. This statement also proves itself true in this case.
Normalisation & Scaling
On important step to prepare the dataset for our machine learning algorithms was normalisation. The idea is to bring the numeric values in a common scale. This is necessary as we have headcount and revenue as two features. While revenue may take a numeric value with 6 digits, it is very unlikely that the headcount has values above 100. The features have a very different range and revenue would influence our model more only due to its higher values.
#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())
The MinMax Scaler is very sensitive to outliers. If your data has some severe outliers, please take care of that beforehand. The range of the normalized data is usually between zero and one as seen in the code above.
Within the project there were three regression models applied to the dataset. They were chosen according to their characteristics and usual purpose of application. Each regression model was evaluated with the help of three indicators: Mean Absolute Error, Root Mean Squared Error and R-Squared.
Evaluation Metrics (Image by Author)
Linear Regression A linear regression describes the process of finding a straight line that is as close as possible to the given data points. The model then tries to minimize the squared errors. As it is assumed that the company valuation increases with better performance gradually, the linear regression is applied to the given dataset. Furthermore, as there are multiple numerous features given in the dataset for this project, it is not a simple but a multiple linear regression. As this project is set up with Python, the module statsmodels is used to perform regression and evaluate the predictive results. While there are several classes available, the ordinary least squares method was chosen as it is mostly used for linear relationships in the training data.