LoginSignup
1
3

More than 3 years have passed since last update.

線形回帰モデルによる価格予測機能を組み込んだ空き家貸し借りアプリをRuby on Railsで開発

Last updated at Posted at 2019-07-28

はじめに

Ruby on Railsを使って、空き家を貸し借りできるwebアプリを開発しました。ただし、正式に公開する前提で開発はしておらず、あくまでデモとして開発しました。

開発した目的としては、rails開発の訓練のためと、ポートフォリオを作成したかったためです。

この記事ではそのwebアプリの解説をしております。

線形回帰モデルによる価格予測の実装については中盤辺りに記載してます。

注意点

1.このwebアプリはRuby on Railsチュートリアルで公開されているソースコードをベースに開発しました。

2.サーバーサイドの実装の訓練が目的で開発をしたため、フロントエンド関連はほとんど手を入れておりません。

ソースコード

ソースコードはgithubで公開しております。
https://github.com/Ryota7101/null_house

参考にさせていただいた記事

Ruby on Railsチュートリアル
rails 予約機能をつける。(一回目)
Railsでコメント機能をつくってみよう
Railsで「投稿お気に入り追加機能」を実装する
railsで検索フォームを作ろう!!

大変お世話になりました。ありがとうございます。

HOME画面

ログインしてない場合のHome画面です
スクリーンショット 2019-07-28 15.20.01.png

サインアップ画面です
スクリーンショット 2019-07-28 15.23.46.png

届いたメールのURLをクリックし、アカウント有効化をすると自身のプロフィール画面にジャンプします。
スクリーンショット 2019-07-28 15.52.58.png

空き家を貸し出す

空き家を貸出しします
スクリーンショット 2019-07-28 15.55.45.png

作成すると、自身のプロフィールページにある「あなたが貸しに出してる空き家」の箇所に作成した空き家のタイトル名が表示されます。

スクリーンショット 2019-07-28 15.56.22.png

空き家の詳細ページ

以下は作成された空き家の詳細ページになります。
1.空き家のタイトル
2.空き家の説明文
3.空き家の貸出者
4.お気に入り機能
5.空き家へのコメント
6.空き家の内覧予約
7.空き家の適正価格算出
8.空き家の借用に対してされたオファーの内容(後述)

スクリーンショット 2019-07-28 16.18.09.png

様々な機能

  • お気に入りボタンを押すと、その空き家がお気に入りに登録されます。
  • コメント欄に文章を入力すると、コメントが表示されます。
  • 内覧予約の開始時間と終了時間に日時を入力すると、予約が表示されます。 スクリーンショット 2019-07-28 16.22.43.png

自身のプロフィールページにある「あなたがお気に入りに追加した空き家」の欄に、お気に入りに登録した空き家のタイトルが表示されます。

スクリーンショット 2019-07-28 16.23.17.png

家賃適正価格予測機能

回帰分析を用いて、空き家作成時に入力したサイズなどの値を元に、家賃の適正価格を表示します。

(モデル作成ソース)
import numpy as np 
import pandas as pd 
from sklearn import linear_model

##データセットはランダムに作成
data = {'layout' : [2, 1, 3, 4, 5], 
        'land_area' : [40, 20, 30, 55, 65],
        'building_area' : [50, 20, 35, 60, 70],
        'age_of_a_building' : [40, 50, 30,20,10],
        'adoress' : [7, 3, 8, 4, 1],
        'price' : [48000, 29000, 33000,55000,67000]}

df = pd.DataFrame(data)

Y_train = df['price']
X_train = df.drop("price", axis=1)

lm_model = linear_model.LinearRegression()
lm_model.fit(X_train,Y_train)

print("切片 =",lm_model.intercept_)
print("回帰係数 =",lm_model.coef_)
切片 = 27073.62274689006
回帰係数 = [    4.82355928 -1097.43589744  1625.64102564   -48.23559279
 -2076.92307692]
def lm(x1,x2,x3,x4,x5)
   (27073 + 4.82355928*x1 - 1097.43589744*x2 + 1625.64102564*x3  - 48.23559279*x4 - 2076.92307692*x5).to_i
  end
<% if current_user.id == @house.user_id %>
    <h3>家賃予測価格</h3>
    <p>この空き家の1ヶ月の適正価格は<%= lm(x1,x2,x3,x4,x5) %>円です</p>
  <% end %>

プレミアム会員機能

プレミアム会員のユーザーに対して、特定の表示を行います。
スクリーンショット 2019-07-28 16.32.37.png

<% if @user.premium? %>
    <h4>あなたはプレミアム会員です!!</h4>
  <% end %>

オファーを出す

空き家を借りたいときに、オファーを出すフォーム画面です。
スクリーンショット 2019-07-28 16.56.06.png

オファーを出すと、出された側の空き家ページにオファーの内容が表示されます。


<h3>オファー一覧</h3>
  <% if @offer %>
    user id : <%= @offer.user_id%><%= @offer.use %>
  <% end %>

スクリーンショット 2019-07-28 17.04.06.png

管理画面

管理者のみがアクセスできる管理画面を作成しました。


def ensure_correct_user
    if current_user.admin?
      #何もしない
    else
      flash[:notice] = "アクセス権限がありません"
      redirect_to root_url
    end
  end

ユーザー一覧

スクリーンショット 2019-07-28 16.35.16.png

コメント一覧

スクリーンショット 2019-07-28 16.47.11.png

内覧予約一覧

スクリーンショット 2019-07-28 16.50.28.png

データ視覚化画面

スクリーンショット 2019-07-28 16.52.33.png

 運営からのお知らせ機能

管理画面と同じく、管理者のみがアクセスできるページで、お知らせを作成したりできます

作成

スクリーンショット 2019-07-28 17.08.59.png

一覧

スクリーンショット 2019-07-28 17.10.08.png

詳細

スクリーンショット 2019-07-28 17.10.50.png

今後の課題

  • テストがおざなりになってしまったので、テストを書く訓練を今後したい。
  • 大規模な機械学習モデルを使用できるようにしたい(GCPにモデルをデプロイして予測を取得したり等)

最後に

webアプリ開発において、基本的な機能は実装できるようになったとは思います。
今後実践の機会を増やして、レベルアップしていきたいです。

※コメントやツッコミあればどんどんください!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3