[PYTHON] If Budokan is a rental office property

Advent Calendar 2019

This is the article on the 20th day of estie Advent Calendar 2019. Please see other articles by all means. https://qiita.com/advent-calendar/2019/estie

Introduction

I'm Miyano, CTO of estie. At estie, we estimate the rent of office properties, but I thought, "Maybe there is a place where it is more profitable to rent an office?"

Therefore, I compared the rent when ** Budokan ** was an office with LightGBM's regression model, and verified which one had the best sales compared to the current usage such as live performances and national events.

By the way, the code is up on github.

Conclusion

In conclusion, if all Budokan are rented as offices, the annual sales will increase by 300 million **.

Since the unit price per tsubo of the rent of the Budokan was estimated to be ** 22,006 yen / tsubo **, the annual sales are about 1.35 billion yen assuming that the occupancy rate is 1.

On the other hand, the sales forecast for FY2019 stated in "Reiwa 1st Year Balance Budget" published by Budokan It was 1,031,445,000 yen (about 1.03 billion yen), so it was a shocking result that it would be more profitable to make it an office. (Although I assume the operating rate is 1)

What i did

Acquisition of training data

In Japan, it is very difficult to collect correct rent data, and there is almost no data that has fallen to the public. Therefore, this time, we will use the "Appraisal Report Information" disclosed from this year. This data contains hypothetical information on the income and expenditure at various points, which was the basis for calculation to determine the "land price". Therefore, the hypothesized rent is also listed, so it is not the actual contracted rent, but it seems to be usable.

For the time being, I downloaded only Tokyo. (See github for specific molding)

Learning

Feature selection

Even if all the information in the above data can be used, it is not good if the features cannot be calculated for the Budokan. Therefore, the following are selected as features.

{
    "landprice": "Land price",
    "gross_floor_area": "Total floor area",
    "floors": "Number of floors above ground",
    "road_width": "Width(Road width)",
    "nearest_station_distance": "Distance to the nearest station",
    "lot_coverage": "Building coverage ratio",
    "office": "Whether for office use or not-hot",
    "retail": "Is it for commercial use?",
    "residential": "Is it for residential use?",
    "hotel": "Is it for hotel use?",
    "industrial": "Is it for industrial use?",
}

I don't know the land price of the Budokan, but it seems good to use the nearest land price.

Learning model

I used LightGBM without thinking about anything. High para is also suitable this time.

{
     "metric": "rmse",
     "n_estimators": 200,
     "objective": "regression"
}

accuracy

For the time being, I divided it into two parts with train_test_split and verified the accuracy. Below is a scatter plot of accuracy.

accuracy.png

The coefficient of determination was 65.19%. I can't say anything, but isn't it good for not tuning anything?

Budokan rent

It is a rent forecast of the Budokan in the town.

Actually, it would be better to guess after learning all the cases, but the model created above is used as it is.

By the way, the features are pulled from the Official Site.


feature_values = ['landprice', 'gross_floor_area', 'floors', 'road_width', 'nearest_station_distance',
                  'lot_coverage', 'office', 'retail', 'residential', 'hotel', 'industrial']
target_col = 'rent_tsubo'

class Estimator:
    def __init__(self):
        self.read_model()

    def read_model(self):
        '''ml.Load the model learned with py
        '''
        with open('accuracy/model.pkl', mode='rb') as f:
            self.model = pickle.load(f)

    def estimate(self, df: pd.core.frame.DataFrame) -> pd.core.frame.DataFrame:
        '''Rent for data frames containing features(Unit price per tsubo)To estimate
        '''
        pred = self.model.predict(
            np.array(df[feature_values]), num_iteration=self.model.best_iteration)
        df[target_col] = pred
        df[target_col] = df[target_col].astype(int)
        return df

def estimate_budokan():
    '''Budokan rent forecast
    '''
    budokan_info = {
        'landprice': 3130000,  #Nearest land price(2-2-5 Kudanminami, Chiyoda-ku, Tokyo)Average value of(3120000, 3140000)
        'gross_floor_area': 21133.300 * 0.3025,  #In units of tsubo
        'floors': 3,  #3 floors above ground
        'road_width': 10,  #I saw Google Maps and it looked like 10m
        'nearest_station_distance': 5 * 80,  #5 minutes on foot* 80m/Minutes
        'lot_coverage': 100 * 8132.240 / 12625.000,  #Building area/Site area
        'office': 1,  #Assuming an office property
        'retail': 0,
        'residential': 0,
        'hotel': 0,
        'industrial': 0,
    }
    estimator = Estimator()
    budokan = estimator.estimate(pd.io.json.json_normalize(budokan_info))
    budokan_dic = budokan.to_dict(orient='list')
    budokan_result = {k: budokan_dic[k][0] for k in budokan_dic.keys()}
    return budokan_result

if __name__ == '__main__':
    budokan_result = estimate_budokan()
    print(budokan_result[target_col]) # 22006

By the way, I looked at the google map and found that the road_width was "about 10m?", So I put it in as it is.

image.png

Comparison with the current balance of Budokan

Assuming that the rent is 22006 (yen / tsubo / month), the rentable area is about 80% of the total floor area (* estimated by estiepro), and the occupancy rate is 1.

Rent(Circle/Tsubo/Month) *Leasable area(Tsubo) *Occupancy rate* 12ヶMonth
=Rent* (Total floor area* 0.8 ) * 1.0 * 12
= 22006 * (21133.300 * 0.3025 * 0.8) * 12
= 1,350,532,497 yen(About 13.500 million yen)

Annual sales are about 1.35 billion yen.

Looking at the Reiwa 1st Year Balance Budget published by the Budokan, Reiwa 2 from April 1, 2019 It seems that the total business revenue on March 31, 2014 is about 1.03 billion yen`.

image.png

Of course, it's just an estimate, so I don't know if it really will happen. ..

in conclusion

By the way, the rent of Budokan based on the office rent estimation model developed by estie (e-rent: also featured in the Nikkei newspaper-> https://www.nikkei.com/article/DGXMZO49454100V00C19A9XY0000/) is

19,600 yen / tsubo

was. Even with this result, the annual sales will be 1.2 billion yen, so it looks like it can really be an office ... (excluding the emotional part)

At estie, we are developing such algorithms and apps to simplify office search! If you are interested, please do! !!

https://www.wantedly.com/companies/company_6314859/projects

estie -> https://www.estie.jp estiepro -> https://pro.estie.jp Company site-> https://www.estie.co.jp

Recommended Posts

If Budokan is a rental office property
Check if the string is a number in python
python> check NoneType or not> if a == None:> if a is None:
What is a distribution?
What is a terminal?
Use a Property Decorator?
What is a hacker?
What is a pointer?
Determine if a string is a time with a python regular expression
If an engineer is asked to entertain a wedding reception