## DEV Community

Posted on • Updated on

# Financial Insights: NumPy's Random Module in Python

In the dynamic world of finance, uncertainty is the only constant. Harnessing the power of randomness is a key aspect of financial modeling, and in this blog post, we'll explore how NumPy's random module in Python becomes a formidable ally for generating random samples. We'll delve into the module's functions and apply them to a financial simulation scenario, shedding light on the potential of Monte Carlo simulations.

### 1. Setting the Stage: Installation and Basics

Before we embark on our exploration, let's ensure we have NumPy installed. Open your terminal or command prompt and type:

``````pip install numpy
``````

Now, let's dive into some of the essential functions in NumPy's random module:

• `numpy.random.rand`: Generates random samples from a uniform distribution over `[0, 1)`.

• `numpy.random.randn`: Generates samples from a standard normal distribution (mean=0, variance=1).

• `numpy.random.randint`: Generates random integers from a specified low to high range.

• `numpy.random.normal`: Generates random samples from a normal (Gaussian) distribution.

### 2. Visualizing Randomness: A Prelude to Financial Simulations

Let's generate 1000 random samples from a standard normal distribution and visualize their distribution.

``````import numpy as np
import matplotlib.pyplot as plt

# Set seed for reproducibility
np.random.seed(42)

# Generate 1000 random samples from a standard normal distribution
random_samples = np.random.randn(1000)

# Plot the histogram of the generated samples
plt.hist(random_samples, bins=30, density=True, alpha=0.7, color='b')
plt.title('Random Samples from Standard Normal Distribution')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.show()
``````

### 3. Financial Simulation: Monte Carlo for Stock Prices

Let's apply the power of randomness to simulate future stock prices using a Monte Carlo simulation with the geometric Brownian motion model.

``````import numpy as np
import matplotlib.pyplot as plt

# Set seed for reproducibility
np.random.seed(42)

# Parameters
days = 252  # Number of trading days in a year
dt = 1 / days  # Time step
mu = 0.001  # Daily drift (expected return)
sigma = 0.02  # Daily volatility

# Initial stock price
initial_price = 100

# Generate random samples from a normal distribution
random_samples = np.random.normal(0, 1, days)

# Calculate daily returns using the geometric Brownian motion model
daily_returns = mu * dt + sigma * np.sqrt(dt) * random_samples

# Calculate cumulative returns to get stock prices
stock_prices = initial_price * np.exp(np.cumsum(daily_returns))

# Plot the simulated stock prices
plt.plot(stock_prices)
plt.title('Monte Carlo Simulation of Stock Prices')